最长公共子序列
来源:互联网 发布:舆情检测软件 编辑:程序博客网 时间:2024/05/29 12:10
什么是最长公共子序列呢?好比一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列。
举个例子,如:有两条随机序列,如 1 3 4 5 5 ,and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5。
提示:最容易想到的算法是穷举搜索法,但考虑到最长公共子序列问题也有最优子结构性质,可以用动态规划解决。
#define N 100stack<int> findLCS(int* arr1, int* arr2, int len1, int len2) {int dp[N][N] = { 0 };stack<int> stk;for (int i = 1; i <= len1; ++i) {for (int j = 0; j <= len2; ++j) {if (arr1[i - 1] == arr2[j - 1]) {/*以arr1[i-1]作为末尾元素, 加上[0~(i-2)],[0~(j-2)] 中的LCS*/dp[i][j] = dp[i - 1][j - 1] + 1;} else {/*若为dp[i][j-1]表示求[0~(i-1)],[0~(j-2)] 中的LCS*/dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);}}}int i = len1, j = len2;while (dp[i][j] && i > 0 && j > 0) {if (dp[i - 1][j] == dp[i][j - 1]) {stk.push(arr1[i - 1]);i--;j--;} else {if (dp[i - 1][j] == dp[i][j]) {i--;} else if (dp[i][j - 1] == dp[i][j]) {j--;}}}return stk;}
1 0
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- Fragment解析
- CentOS 安装 Maven
- WPF 让自己的缓冲动画永不卡死
- 【微信小程序】button按钮控件的演示
- UI常用颜色ID>>(复制别人的,放博客上备份一份,请勿转载)
- 最长公共子序列
- <textarea></textarea>标签显示内容,
- 从用户的视角看待网页设计(三)
- MySQL5.7安装Apply Server Configuration卡顿
- 本科生《操作系统原理》 课程常见题型与考点
- 图解Linux命令之--expr命令
- UML——状态图
- 算法训练 动态数组使用
- Redis 数据库之列表(list)