首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

经典DP-LCS

2012-12-22 
经典DP--LCS先在百度上抄两段:问题:已知序列X,Y,求序列Z,使得Z是X,Y的子序列,不要求连续,且Z严格递增  最

经典DP--LCS
先在百度上抄两段:
    问题:已知序列X,Y,求序列Z,使得Z是X,Y的子序列,不要求连续,且Z严格递增
  最长公共子序列是一个十分实用的问题,它可以描述两段文字之间的“相似度”,即它们的雷同程度,从而能够用来辨别抄袭。对一段文字进行修改之后,计算改动前后文字的最长公共子序列,将除此子序列外的部分提取出来,这种方法判断修改的部分,往往十分准确。简而言之,百度知道、百度百科都用得上。
    显然穷举发需要指数开销,DP开销可以到O(MN)
   用C[i][j]记录序列X,Y的最长公共子序列的长度,有如下动态规划状态转移方程:
C[i][j]=0    i=j=0;
C[i][j]=c[i-1][j-1]  x[i]=y[j];
C[i][j]=max{c[i][j-1],c[i-1][j]}  x[i]!=y[i];

路径保存:
flag[i][j]为标志符,
flag[i][j]=0表示Xi,Yj的最长公共子序列由Xi-1,Yj-1的最长公共子序列尾部加上X[i]确定
flag[i][j]=1表示Xi,Yj的最长公共子序列由Xi-1,Yj确定
flag[i][j]=2表示Xi,Yj的最长公共子序列由Xi,Yj-1确定

热点排行