写在前面的话:
学习米铺高级架构师的博文中算法的内容,试着将里面的例子用Python加以实现,尚属练习,不足之处请指正。
文章参考地址:经典算法专题
最长公共子序列
问题描述
参看:最长公共子序列
解决方案
<1> 枚举法
这种方法是最简单,也是最容易想到的,当然时间复杂度也是龟速的,我们可以分析一下,刚才也说过了cnblogs的子序列个数有27个 ,延伸一下:一个长度为N的字符串,其子序列有 2N 个,每个子序列要在第二个长度为N的字符串中去匹配,匹配一次需要 O(N) 的时间,总共也就是 O(N∗2N) ,可以看出,时间复杂度为指数级,恐怖的令人窒息。
<2> 动态规划
既然是经典的题目肯定是有优化空间的,并且解题方式是有固定流程的,这里我们采用的是矩
阵实现,也就是二维数组。第一步:先计算最长公共子序列的长度。 第二步:根据长度,然后通过回溯求出最长公共子序列。
现有两个序列 X=x1,x2,x3,...xi , Y=y1,y2,y3,....,yi ,
设一个 C[i,j] : 保存 Xi 与 Yj 的LCS的长度。
递推方程为:
代码实现