LCS 最大公共序列算法

来源:互联网 发布:淘宝店铺怎么经营模式 编辑:程序博客网 时间:2024/05/23 13:30

这些天在了解chrome的courgette,  了解了rsync算法,  也了解了courgette使用了bsdiff 算法,  然后知道了bsdiff算法里主要使用的是 LCS 算法, 这里参考了july大牛的文章: 

http://blog.csdn.net/v_july_v/article/details/6695482


自己做一点概括性的总结, 用以备忘,  也把自己学习中碰到的一些问题记录下来:

1、LCS 求最大子序列, 一个办法当然是穷举法了, 但是穷举法太耗时间了O(2^m*2^n), 基本没用.

2、聪明的程序员想到了,一个用矩阵来查找的算法,就是把两个队列用整形矩阵表示, 相同的为1, 不同的为0, 然后求最大对角线,优化是优化了很多, 不过求最大对角线也不省心。

3、聪明的程序员再次优化了算法,就是相同的不是用1表示, 而是数字叠加,这样再找最大对角线的时候,就比较舒服了,时间复杂度也降到了 O(mn)+O(m+n) 如下图:

lcs矩阵图

在画上图的时候碰到了一些问题,自己总结成两条:

1、字符相同,则指向左上,并加1

2、字符不同,则指向左边或者上边较大的那个

0 0