如何用Python计算最长公共子序列和最长公共子串

1. 什么是最长公共子序列?什么是最长公共子串?

1.1. 最长公共子序列(Longest-Common-Subsequences,LCS)

最长公共子序列(Longest-Common-Subsequences,LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置

最长公共子序列问题是一个经典的计算机科学问题,也是数据比较程序,比如Diff工具,和生物信息学应用的基础。它也被广泛地应用在版本控制,比如Git用来调和文件之间的改变。

1.2 最长公共子串(Longest-Common-Substring,LCS)

最长公共子串(Longest-Common-Substring,LCS)问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是连续的。

2. 如何求解最长公共子序列?

例如序列str_a=world,str_b=wordl。序列wo是str_a和str_b的一个公共子序列,但是不是str_a和str_b的最长公共子序列,子序列word是str_a和str_b的一个LCS,序列worl也是。

暴力查找?
寻找LCS的一种方法是枚举X所有的子序列,然后注意检查是否是Y的子序列,并随时记录发现的最长子序列。假设X有m个元素,则X有2^m个子序列,指数级的时间,对长序列不实际。

2.1 基于递归的方法

根据上边分析结果,可以写出简洁易懂的递归方法。

def recursive_lcs(str_a, str_b):if len(str_a) == 0 or len(str_b) == 0:return 0if str_a[0] == str_b[0]:return recursive_lcs(str_a[1:], str_b[1:]) + 1else:return max([recursive_lcs(str_a[1:], str_b), recursive_lcs(str_a, str_b[1:])])print(recursive_lcs('qweasde', 'asdzeexc'))

2.2 基于自底向上动态规划的方法

根据上述分析问题,动态规划递推公式也非常明显,可以写出动态规划代码:

转载:https://www.cnblogs.com/CheeseZH/p/8830482.html

转载于:https://www.cnblogs.com/tianqizhi/p/9531968.html

用Python计算最长公共子序列和最长公共子串相关推荐

  1. Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

    Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...

  2. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  3. 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离

    最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列.比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大:而 {5,-6,4,2}的最大子序列是{4, ...

  4. 【恋上数据结构】动态规划(找零钱、最大连续子序列和、最长上升子序列、最长公共子序列、最长公共子串、0-1背包)

    动态规划(Dynamic Programming) 练习1:找零钱 找零钱 - 暴力递归 找零钱 - 记忆化搜索 找零钱 - 递推 思考题:输出找零钱的具体方案(具体是用了哪些面值的硬币) 找零钱 - ...

  5. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

  6. 最长公共子序列暴力法C语言,利用C++实现最长公共子序列与最长公共子串

    一.问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母 ...

  7. 一分钟搞定最长公共子序列与最长公共子串的问题

    感谢大家的理解与指正!觉的写的不错的小伙伴儿,一键三连支持一下,后期会有持续更新!!抱拳了罒ω罒   最长公共子序列和最长公共子串都是动态规划的经典题型,最长公共子序列要求的是不一定连续,最长公共子串 ...

  8. 最长上升子序列、最长公共子序列、最长公共上升子序列(LIS、LCS、LCIS)

    LIS.LCS.LCIS 最长上升子序列LIS 最长公共子序列LCS 最长公共上升子序列LCIS 最长上升子序列LIS 题目链接:AcWing895. 最长上升子序列 这里只说明 O ( n 2 ) ...

  9. 求最长公共子序列python_用Python计算最长公共子序列和最长公共子串

    1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公共子序列(Longest-Common-Subseq ...

最新文章

  1. linux 源码安装浏览器,vps+linux+安装浏览器
  2. Spring学习6之自动装配Bean02
  3. 蓝桥杯哈夫曼树java_Java实现蓝桥杯3n+1问题
  4. [Swift]LeetCode793. 阶乘函数后K个零 | Preimage Size of Factorial Zeroes Function
  5. View-屏幕坐标 Content-网页(内容)坐标 mScrollX和mScrollY-屏幕坐标偏移
  6. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
  7. 编写 Servlet 2.3 Filter
  8. python2.x 文件读写
  9. java实现自动任务_Java实现定时任务的三种方法
  10. Regsvr32.exe 的用法
  11. 2021暨南大学计算机技术上岸经验贴
  12. Bailian4144 畜栏保留问题【贪心】
  13. win7搭建oracle,win7下安装Oracle即时客户端搭建
  14. SpringBoot系列(5):SpringBoot对JSON数据的处理
  15. 小程序组件库ColorUI教程
  16. 使用FudanNLP实现依存句法分析
  17. Unity-音频播放
  18. SQL中round()函数、Ucase()、Lcase()、as的用法
  19. 数据结构28——高精度计算PI值
  20. HDOJ 2112 HDU Today (最短路 Dijkstra SPFA)

热门文章

  1. 谈谈OAB离线地址簿无法更新问题?(服务器是Exchange 2007和Exchange 2010)
  2. JS中将变量转为字符串
  3. 【linux】常用命令总结
  4. DOS 下编写带有日期的脚本例子
  5. 系统集成资质-信息系统项目管理师考试综合介绍
  6. 护士如何预防职业病:下肢静脉曲张-健康小常识
  7. C#写一个URL编码转换GB23121的方法,然后可以取到天气预报
  8. shell 判断执行结果 是否要推出
  9. L3-007. 天梯地图-PAT团体程序设计天梯赛GPLT
  10. 【数据结构】堆的建立(边输入数据边建立)(给定数字顺序插入)