最长公共子序列问题
本文最后更新于:2024年3月18日 晚上
最长公共子序列问题
问题分析
- 给定两个序列 X = { x1, x2, …, xm }和 Y = { y1, y2, …, yn },找出 X 和 Y 的最长公共子序列。
算法分析
- 设序列 X = { x1, x2, …, xm }和 Y = { y1, y2, …, yn }的最长公共子序列为 Z = { z1, z2, …, zk },则。
- 若 xm = yn,则 zk = xm = yn,且 Zk-1是 Xm-1和 Yn-1的最长公共子序列。
- 若 xm != yn,且 zk != xm,则 Z 是 Xm-1和 Y 的最长公共子序列。
- 若 xm != yn,且 zk != yn,则 Z 是 X 和 Yn-1的最长公共子序列。
- 其中 Xm-1 = { x1, x2, …, xm-1 }, Yn-1 = { y1, y2, …, yn-1 }, Z = { z1, z2, …, zk-1 }
代码实现
1 | |
LCSLength(int[] x, int[] y, int[][] c, int[][] b):计算最长公共子序列最优值。int x:序列 Xint y:序列 Yint[][] c:c[i][j]存储 Xi和 Yj的最长公共子序列的长度。int b[i][j]:b[i][j]记录 c[i][j]的值是由哪一个子问题的解得到的,其中1代表左上,2代表上,3代表左
LCS(m, n, x, b):计算最长公共子序列最优解。int m:序列 X 的长度。int n:序列 Y 的长度。int x:序列 Xint b[i][j]:b[i][j]记录最优值是由哪一个子问题的解得到的,其中1代表左上,2代表上,3代表左
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!