动态规划之最长公共子序列
来源:互联网 发布:布林线指标源码 编辑:程序博客网 时间:2024/05/18 13:28
/* * 算法导论最长公共子序列 */public class LCS {private String X = null;//序列x1..xmprivate String Y = null;//序列y1..ynprivate int[][] c= null;//c[i][j]表示Xi和Yj的LCS长度private int xlen = 0;//序列x的长度private int ylen = 0;//序列y的长度public static void main(String[] args) {//算法导论基因序列String str1 = "ACCGGTCGAGTGCGCGGAAGGAAGCCGGCCGAA";String str2 = "GTCGTTCGGAATGCCGTTGCTCTGTAAA";LCS lcs = new LCS(str1,str2);lcs.lcsLength();lcs.printLCS(lcs.xlen, lcs.ylen);}public LCS(String x, String y) {X = x;Y = y;xlen = X.length();ylen = Y.length();c = new int[xlen+1][ylen+1];}private void lcsLength() {for(int i=0;i<=xlen;i++) {//当y为空时,LCS长度为0c[i][0] = 0;}for(int j=0;j<=ylen;j++) {//当x为空时,LCS长度为0c[0][j] = 0;}for(int i=1;i<=xlen;i++) {for(int j=1;j<=ylen;j++) {if(X.charAt(i-1) == Y.charAt(j-1)) {c[i][j] = c[i-1][j-1] + 1;} else {c[i][j] = (c[i-1][j] >= c[i][j-1] ? c[i-1][j] : c[i][j-1]);}}}}private void printLCS(int i,int j) {if(i==0 || j==0) {return;}if(X.charAt(i-1) == Y.charAt(j-1)) {printLCS(i-1,j-1);System.out.print(X.charAt(i-1));} else if(c[i-1][j] >= c[i][j-1]) {printLCS(i-1,j);} else {printLCS(i,j-1);}}}
运行结果与算法导论上一致:
GTCGTCGGAAGCCGGCCGAA
0 0
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- 动态规划之最长公共子序列
- LSM树由来、设计思想以及应用到HBase的索引
- 解析angularjs中的三种数据绑定策略
- 串口termios结构体的详细设置
- Redhat Enterprise 下kernel编译方法
- MySQL的“load data infile”中文件找不到的问题
- 动态规划之最长公共子序列
- Oracle 保密字段截取 例如手机号,身份证信息
- 安卓常见类备忘录之LayoutParams
- MAC下安装与配置MySQL
- javascript内存泄露及解决方案详解
- 开源框架EventBus的使用
- [Rx86OS-IV] 导入32位C语言
- 125:Valid Palindrome【两指针】【字符串】
- Kafka(分布式发布订阅消息系统)