现在的位置: 首页 > 综合 > 正文

算法:最长公共子序列

2017年10月27日 ⁄ 综合 ⁄ 共 476字 ⁄ 字号 评论关闭

问题描述:给定两个字符串A(a1...an),B(b1...bm),求他们的最长公共子序列C(注意,子序列表示是原序列删除某接几个元素后剩下的序列)。

解决方法:递归(memo)、DP(自底向上)

C[i,j]为子序列串:a1...ai,b1...bj的最长公共子串

则原问题的解应该是C[n,m];

现在看看C[i,j]不同ij之间有什么关系(即原问题是否具有最优子结构以求降规模),发现有如下的关系:

           |      NULL(空串)                          i=0 or j=0  ①

C[i,j]= |      C[i-1,j-1],ai                           ai = bj        ②

           |      Longer{ C[i,j-1] , C[i-1,j] }   ai != bj       ③

为什么是上面这个方程这样--是可以证明的。

证①

=====================================

问题具有最优子结构(即可用递归实现)

==to be continued...

抱歉!评论已关闭.