最长共同子序列(LCS)的动态规划算法

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,插缺则没有惩罚,如果要对插缺进行统计分析,则属于序列联配问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值