经典算法的Python实现(4)

写在前面的话:

学习米铺高级架构师的博文中算法的内容,试着将里面的例子用Python加以实现,尚属练习,不足之处请指正。

文章参考地址:经典算法专题


最长公共子序列

问题描述

参看:最长公共子序列

解决方案

<1> 枚举法

这种方法是最简单,也是最容易想到的,当然时间复杂度也是龟速的,我们可以分析一下,刚才也说过了cnblogs的子序列个数有27个 ,延伸一下:一个长度为N的字符串,其子序列有 2N 个,每个子序列要在第二个长度为N的字符串中去匹配,匹配一次需要 O(N) 的时间,总共也就是 O(N2N) ,可以看出,时间复杂度为指数级,恐怖的令人窒息。

<2> 动态规划

既然是经典的题目肯定是有优化空间的,并且解题方式是有固定流程的,这里我们采用的是矩
阵实现,也就是二维数组。

    第一步:先计算最长公共子序列的长度。
    第二步:根据长度,然后通过回溯求出最长公共子序列。

现有两个序列 X=x1,x2,x3...xi Y=y1,y2,y3....yi

设一个 C[i,j] : 保存 Xi Yj 的LCS的长度。

递推方程为:
这里写图片描述

代码实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值