Python 中最长公共子序列的长度

 更新时间:2023年06月20日 11:13:28   作者:迹忆客  
子序列是在不改变剩余字符的顺序的情况下,在删除一些字符或不删除任何字符后从给定序列获得的序列,这篇文章主要介绍了Python 中的最长公共子序列,需要的朋友可以参考下

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

本篇文章讲介绍在 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 中的最长公共子序列的文章就介绍到这了,更多相关Python最长公共子序列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 爬虫入门必学:Requests 库核心用法全解

    Python 爬虫入门必学:Requests 库核心用法全解

    requests是python中一个常用于发送HTTP请求的第三方库,它极大地简化了web服务交互的过程,本文给大家介绍python数据分析之爬虫基础requests详解,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • python查看模块,对象的函数方法

    python查看模块,对象的函数方法

    今天小编就为大家分享一篇python查看模块,对象的函数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python入门教程(十九)python的函数详解

    Python入门教程(十九)python的函数详解

    这篇文章主要介绍了Python入门教程(十九)python的函数,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段,需要的朋友可以参考下
    2023-04-04
  • 详解python 发送邮件实例代码

    详解python 发送邮件实例代码

    本篇文章主要介绍了python 发送邮件实例代码,详细的介绍了各种方式发送邮件,包括文件形式的邮件、HTML形式的邮件、带图片的HTML邮件等,有兴趣的可以了解一下。
    2016-12-12
  • Python利用PyAutoGUI轻松搞定图片上传

    Python利用PyAutoGUI轻松搞定图片上传

    PyAutoGUI作为一个GUI操作的神器,我们看到了它的操作都很简单,非常通俗易懂,基本上看到函数就能知道它的功效。本文将用它实现图片上传功能,感兴趣的可以了解一下
    2022-09-09
  • 如何解决flask修改静态资源后缓存文件不能及时更改问题

    如何解决flask修改静态资源后缓存文件不能及时更改问题

    在本篇内容里小编给大家整理的是关于如何解决flask修改静态资源后缓存文件不能及时更改问题,需要的朋友们可以学习下。
    2020-08-08
  • pycharm快捷键自动提示documentation问题(auto Ctrl+Q)

    pycharm快捷键自动提示documentation问题(auto Ctrl+Q)

    这篇文章主要介绍了pycharm快捷键自动提示documentation问题(auto Ctrl+Q),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • NumPy random.choice()函数的使用小结

    NumPy random.choice()函数的使用小结

    随机采样 是一个非常常见的操作,NumPy提供的numpy.random.choice() 函数让我们可以方便地从数组或序列中随机选取元素,本文将带深入介绍 numpy.random.choice() 的功能及常见实战案例,感兴趣的可以了解一下
    2026-01-01
  • Python 中的 global 标识对变量作用域的影响

    Python 中的 global 标识对变量作用域的影响

    global 标识用于在函数内部,修改全局变量的值。这篇文章主要介绍了Python 的 global 标识对变量作用域的影响,需要的朋友可以参考下
    2019-08-08
  • 如何在Python 游戏中模拟引力

    如何在Python 游戏中模拟引力

    这篇文章主要介绍了在你的 Python 游戏中模拟引力的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论