动态规划之求最长公共子序列PPT
最长公共子序列(Longest Common Subsequence, LCS)是动态规划的一个经典问题。给定两个序列,找出这两个序列中最长的公共子序列。...
最长公共子序列(Longest Common Subsequence, LCS)是动态规划的一个经典问题。给定两个序列,找出这两个序列中最长的公共子序列。子序列指的是从一个序列中删除若干元素(也可以不删除)但不改变剩余元素顺序所得到的新序列。问题描述给定两个序列 X = {x1, x2, ..., xm} 和 Y = {y1, y2, ..., yn},求它们的最长公共子序列。动态规划解法设 dp[i][j] 表示 X[0..i-1] 和 Y[0..j-1] 的最长公共子序列的长度。当 时,即当前字符相等,最长公共子序列长度加1当 时,即最长公共子序列要么是 和 的最长公共子序列,要么是 和 的最长公共子序列,即空序列与任何序列的最长公共子序列长度为0按 i 和 j 的递增顺序计算 dp[i][j]。dp[m][n] 即为所求的最长公共子序列长度。要找出具体的子序列,可以从 dp[m][n] 开始,沿着状态转移的路径回溯。Python 代码实现时间复杂度与空间复杂度时间复杂度O(mn),其中 m 和 n 分别为两个序列的长度空间复杂度O(mn),用于存储动态规划表