1、定义成将一个字符串变换成另一个字符串需要的最小的编辑操作数目,这里的操作是指插入一个字符、删除一个字符、将一个字符替换成另一个字符。2、AT-GTTAT-表示对应于V=ATGTTAT的行,而ATCGT-A-C表示对应于W=ATCGTAC的行,一个有散布的空格字符(用-表示)的字符串。另一种方法是用122345677表示AT-GTTAT-,表示V中字符出现在一个给定位置上的编号。W用123455667表示。3、定义字符串V=V1...Vn和W=W1...Wn的共同子序列,公是V中的一个字符序列,不一定要求连续。 4、最长共同子序列问题:找出2个字符串中共同的最长子序列 输入:2个字符串V和W输出:字符串V和W的最长共同子序列建立一个二维阵列b,即动态规划表,用于存储三个回溯操作:UP对应于删除操作,LEFT对应于插入操作,LEFTUP对应于Vi匹配Wj操作。
LCS(v,w)
for i<-0 to n
Si,0<-0
for j<-1 tom
S0,j<-0
for i<-1 to n
for j<-1 to m
Si,j<-
max(
Si-1,j ,
Si,j-1 ,
Si-1,j -1
+1 (if Vi=Wj)
)
bi,j<-[(if Si,j=Si-1,j)UP],[(
if Si,j=Si,j
-1)LEFT],[(
if Si,j=Si-1,j
-1
+1)LEFTUP]
return (Sn,m,b)
二、利用 b中的存储信息可打印出最长共同子序列
PRINTLCS(b,v,i,j)
if i=0 or j=0
return
if bi,j=
LEFTUP
PRINTLCS(b,v,i-1,j-1)
print Vi
else
if bi,j=UP
PRINTLCS(b,v,i-1,j)
else
PRINTLCS(b,v,i,j-1)
三、编辑距离:
di,j=min(di-1,j+1 ,di,j-1+1 ,di-1,j-1 +1 if(Vi=Wj))
四、LCS问题对应于匹配则奖励1,插缺则没有惩罚,如果要对插缺进行统计分析,则属于序列联配问题
最长共同子序列(LCS)的动态规划算法
最新推荐文章于 2023-03-30 21:55:32 发布