迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的最长公共子序列

作者:迹忆客 最近更新:2023/06/02 浏览次数:

子序列是在不改变剩余字符的顺序的情况下,在删除一些字符或不删除任何字符后从给定序列获得的序列。 最长公共子序列是指所有给定序列共有的最长子序列。

本篇文章讲介绍在 Python 中查找两个序列之间最长公共子序列的长度。


使用 Naive 方法在 Python 中查找最长公共子序列

假设我们有两个序列:S1 和 S2,其中:

S1 = QEREW

S2 = QWRE

这里,常见的子序列是 QE、QW、QR、QRE 和 RE。 其中最长的公共子序列是QRE,长度为3。

现在,让我们看看打印最长公共子序列长度的 Python 解决方案。

代码:

def LCS(S1, S2, x, y):

    if x == 0 or y == 0:
        return 0

    if S1[x - 1] == S2[y - 1]:
        return LCS(S1, S2, x - 1, y - 1) + 1

    return max(LCS(S1, S2, x, y - 1), LCS(S1, S2, x- 1, y))
S1 = "QEREW"
S2 = "QWRE"
x = len(S1)
y = len(S2)
print ("Length of LCS is", LCS(S1, S2, x, y))

输出:

Length of LCS is 3

这种方法是用递归方法解决 Python 中的 LCS 问题。 它检查给定序列的所有可能子序列并找到最长的公共子序列。


使用动态规划在 Python 中查找最长公共子序列

动态规划是普通递归方法的优化。 正如我们所看到的,递归方法中存在重叠的子问题,具有许多重复的函数调用。

动态方法将每个函数调用的结果保存在一个数组中,以便在需要时使用。 结果,它减少了函数调用的次数。

代码:

def LCS(S1, S2, m, n):
    R = [[None]*(n+1) for i in range(m+1)]

    for i in range(m+1):
        for j in range(n+1):
            if i == 0 or j == 0:
                R[i][j] = 0
            elif S1[i-1] == S2[j-1]:
                R[i][j] = R[i-1][j-1] + 1
            else:
                R[i][j] = max(R[i-1][j], R[i][j-1])

    return R[m][n]

S1 = "QEREW"
S2 = "QWRE"
m = len(S1)
n = len(S2)
print("Length of LCS is",LCS(S1, S2, m, n))

输出:

Length of LCS is 3

这种方法更快、更有效,因为它具有 O(mn) 的时间复杂度。

上一篇:在 Python 请求中使用 Cookie

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 请求中使用 Cookie

发布时间:2023/06/02 浏览次数:91 分类:Python

本篇文章介绍如何使用 requests.get() 借助 Python 中的 cookies 参数获取 cookies,以及如何访问需要登录的特定网页。

在 Python 中设置请求的最大重试次数

发布时间:2023/06/02 浏览次数:65 分类:Python

本教程描述了为什么我们会收到错误消息,指出超出了最大重试次数,以及我们如何在 Python 中为请求设置 max_retries。 如果服务器上的负载导致此错误,它还会为我们提供提示。

在 Python 中使用requests模块发布表单数据

发布时间:2023/06/02 浏览次数:180 分类:Python

本篇文章介绍了 Python requests 模块,并说明了我们如何使用该模块在 Python 中发布表单数据。使用 requests 模块在 Python 中发布表单数据

在 Python 中使用令牌进行 API 调用

发布时间:2023/06/02 浏览次数:148 分类:Python

在 Python 中进行不带令牌的 API 调用 要启动,我们需要先安装一个 Python 库来处理这个请求; 当我们在 Python 中调用 API 时,我们可以使用令牌来调用

在 Python 中使用请求设置用户代理 User-Agent

发布时间:2023/06/02 浏览次数:175 分类:Python

本文介绍 HTTP 标头用户代理主题以及如何使用 Python 中的请求设置用户代理。 您将了解 HTTP 标头及其在理解用户代理、获取用户代理以及学习使用 Python 中的请求设置用户代理的多种方法方面的

Python 忽略请求中的 SSL 安全证书检查

发布时间:2023/06/02 浏览次数:115 分类:Python

本文将提供多种使用请求禁用安全证书检查的方法。了解 SSL 安全检查背后的原因及其失败的原因 如果程序使用 Python 请求从 SSL 证书已过期的 URL 获取请求,它会引发两个异常。

Python 请求分页

发布时间:2023/06/02 浏览次数:179 分类:Python

在本文中,我们将了解分页以及如何克服 Python 中与分页相关的问题。 读完本文后,我们将能够了解 Python 分页以及如何使用它处理问题。什么是 Python 中的分页

Python 生成器推导

发布时间:2023/06/02 浏览次数:159 分类:Python

在本文中,我们将学习 python 的生成器和生成器推导以及示例。Python 中的生成器:Python 中的生成器是返回可迭代或遍历对象的函数,用于创建一次遍历项目的迭代器。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便