算法面试题(二)-- 最长公共子序列(LCS)与苦恼的月下老人
来源:互联网 发布:斗鱼主播qqq的淘宝店是 编辑:程序博客网 时间:2024/05/01 05:24
这是一个典型的动态规划题,属于求两个字符串的最长公共子序列问题,如果你手边有《算法导论》这本书,这个问题就可以在书中找到;求量个序列中最长的公共子序列算法。广泛的被应用在图像相似处理、媒体流的相似比较、计算生物学方面,生物学家尝尝利用该算法进行基因序列比对,由此推测学列的结构、功能和演化进程。另外,LCS算法可以用来描述两端文字之间的相似度,即它们的雷同度,通常备用在论文的查重检测上;另另外,对一段文字进行修改之后,将除此序列外的部分提取出来,这种用来判断修改部分的方法十分准确。
这一问题的求解方法,如果我们用暴力法来解决,就是利用穷举法,对每一个子序列都检查是否是子序列,显然比较慢,所以我们有更好的方法来解决该问题。
LCS问题可以归结为下面公式:
Code:
int LCS(const char *Male,const char *Female) { int N = (int)strlen(Male); int M = (int)strlen(Female); int pair[1001][1001];//配对结果矩阵 //初始化 for (int i = 0; i < N; i ++) { pair[i][0] = 0; } for (int i = 0; i < M; i ++) { pair[0][i] = 0; } for (int i = 1; i <= N; i ++) { for (int j = 1; j <= M; j ++) { if (Male[i-1] == Female[j-1]) pair[i][j] = pair[i-1][j-1] + 1; else { if (pair[i-1][j] > pair[i][j-1]) pair[i][j] = pair[i-1][j]; else pair[i][j]=pair[i][j-1]; } } } return pair[N][M]; }
int main(){ const char Male[1001]; const char Female[1001]; scanf("%s\r\n%s",Male,Female); printf("%d",LCS(Male,Female)); return 0;}
result:
2 0
- 算法面试题(二)-- 最长公共子序列(LCS)与苦恼的月下老人
- 最长公共子序列算法(LCS)
- LCS算法(最长公共子序列)
- 最长公共子序列(LCS)算法
- 常考的经典算法--最长公共子序列(LCS)与最长公共子串(DP)
- LCS算法的概述及由来(LCS)最长公共子序列
- 《算法导论》实验二:最长公共子序列(LCS)算法
- 算法设计之最长公共子序列(LCS)问题
- 算法学习 - 最长公共子序列(LCS)C++实现
- LCS算法(最长公共子序列问题)
- 算法学习-最长公共子序列(LCS)
- 算法导论-----最长公共子序列LCS(动态规划)
- [算法] 最长公共子序列(LCS)问题
- 算法导论学习笔记(十二):动态规划(二):最长公共子序列(LCS)
- 面试(动态规划算法之:最长公共子序列 & 最长公共子串(LCS))
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- Python使用paramiko进行远程交互
- Docker 网络不通的解决方法
- html5学习路线规划------莫名觉得还挺有爱滴。。。。
- Android Studio安装apk应用手机桌面两个图标
- 禁用mac 内置键盘
- 算法面试题(二)-- 最长公共子序列(LCS)与苦恼的月下老人
- junit的test 方法执行两次
- ubuntu 中docker 安装
- Hibernate 的那些坑
- Gradle详解-Chapter 16. Writing Build Scripts
- Studio和Eclipse用SVN提交代码是要忽略的文件
- 初学Redis(1)——认识Redis
- 不用ctrl,而是shift选中所有文件
- css3loading状态1