算法高手请进!狂难!最佳公共子串匹配的数学描述?

mizhael 2004-01-23 12:54:37
最佳子串匹配在计算中的应用:

例1。求
z1=4*a+4*b+2*c+1*d;
z2=2*a-4*b+1*c+4*d;
的最简单计算方法。所有计算都用移位和加搞定。不用乘法。

引入
w1=2*a+1*c作为公共子串,先计算之,然后重用reuse该结果。
z1=2*w1+4*b+1*d;
z2=1*w1-4*b+4*d;


例2。求
z1=4*a+4*b+2*c-5*d;
z2=2*a-4*b+1*c+4*d;
的最简单计算方法。

引入
w1=2*a+1*c;
w2=4*b-4*d;

z1=2*w1+1*w2-1*d;
z2=1*w1-1*w2;

上面的问题如果用greedy搜索算法最佳公共子串匹配不难搞定。

这里请教的是,如何不用搜索,用数学描述这个问题。

首先我都没有办法用数学语言来描述这里的优化目标。。。公共子串,重用等等,如何用数学来限定和描述?



...全文
44 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
e_feeling 2004-01-28
  • 打赏
  • 举报
回复
GZ
shshsh_0510 2004-01-25
  • 打赏
  • 举报
回复
本来我还以为你写论文用呢,原来不是:D
n个字符串,求最佳公共子串。
1。最佳的定义。
显然不是最长就最佳,应该是长度减1再乘出现次数
如 (1,2,3,4,5),(1,2,4,5,6),(1,2,5,6,7),(1,2,7,8,9),(1,2,3,9,10)中最长的是(1,2,3),而最佳的是(1,2)
2。复杂度
每个表达式有n(n-1)/2个子串,如(1,2,3,4,5)的为(1,2),(1,2,3),(1,2,3,4),(1,2,3,4,5),(2,3),(2,3,4),(2,3,4,5),(3,4),(3,4,5),(4,5)

k个表达式的子串为n(n-1)/2组,每组k个
于是,你自己看着优化把 :)

mizhael 2004-01-24
  • 打赏
  • 举报
回复
我的意思是在做优化的时候,
有的函数是能用数学表达的,比如f(x)=-x^2, 求最大值;
而前面的优化目标无法表示为函数:
比如要求[4 4 2 -5;
2 -4 1 4]
中最大数目的reuse pattern,
这个冬冬如何表达为函数的形式呢?

换言之,导入新的中间变量的数学形式是什么?矩阵变换?


mizhael 2004-01-24
  • 打赏
  • 举报
回复
楼上两位大侠说得极是。令我一下豁然开朗。不过我还需要消化一下才能理解。

greedy搜索就是贪心搜索。比如我可以在N个式子里先两两寻找公共子串,然后
找到公用度最大(大家都想要的)的式子,我就定义一个新变量,代替那个公共
子串,然后再如上递归。据说在两两寻找公共子串的时候,如果有多种选择,比
如一个公共子串长为3个项,另一个公共子串长为2个项,则选择哪一个好像会对
以后的搜索产生影响。因此这是个贪心搜索的过程。

现在假设我们只需要优化加法个数。不考虑移位个数:

例1。
z1=4*a+4*b+2*c+1*d;
z2=2*a-4*b+1*c+4*d;
写成矩阵[4 4 2 1;
2 -4 1 4]

例2。
z1=4*a+4*b+2*c-5*d;
z2=2*a-4*b+1*c+4*d;
写成矩阵[4 4 2 -5;
2 -4 1 4]

有没有办法通过一种数学描述从数量上直接得出最少需要的加法数目(不需要
给出世纪的分解方法)?楼上已经给了不少主意。但是我还不太明白。这几天
脑子缺氧的厉害。递归的搜索过程实在不好描述,也不好操作。

递归套递归的例子能不能一次从数量上直接搞定?
shshsh_0510 2004-01-23
  • 打赏
  • 举报
回复
关于加法和乘法运算的整系数一次表达式f(x1,x2,....xn)的集合为F,xi属于F(递归:))
将f变换为系数不大于2的 g(y1,y2,..),g属于F,其中yi=fi(x1,x2,....xn),
设加法权重为a,位移为b,V1(g)为g的系数为1的项的个数,V2(g)为g的系数为2的项的个数
定义计算量函数V(g)=a*(V1(g)+V2(g)-1)+ b*V2(g)
对给定的有限个自变量xi的集合X,关于X的所有属于F的表达式集合FX
现给定的一组自变量x ,一组函数fi(x1,x2,....xn),
求一组变换C:f->g
使gi属于FX,且 西哥马V(g)最小
gnefuil 2004-01-23
  • 打赏
  • 举报
回复
啥叫greedy搜索?

数学描述能不能这样:
设两个表达式中的变量为[ai],系数分别是[b1i]和b[2i],系数都是2的幂,可能正可能负
即z1=求和b1i*ai,z2=求和b2i*ai 1<=i<=n
设有一组中间表达式[wj] 1<=j<=m
wj=求和cji*ai
代入之后的表达式为
z1=求和d1i*ai+求和e1j*wj
1<=i<=n 1<=j<=m
z2=求和d2i*ai+求和e2i*wj
1<=i<=n 1<=j<=m
满足的条件为
d1i+求和e1j*cji=b1i
d2i+求和e2j*cji=b2i
要优化的目标是移位和加法的次数
移位的次数为
求和log(2,|cji|)+求和log(2,|d1i|)+求和log(2,|d2i|)+求和log(2,|e1j|)+求和log(2,|e2j|)
加法的次数应该为所有不为0的系数的个数减去中间变量的个数再减去2
不知道你要优化什么?

33,029

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧