js动态规划---最长子序列(lcs)
function LCS(wordX, wordY) {
var m = wordX.length;
var n = wordY.length;
this.lcs = function(){
var l = [];
var path = [];
var i, j, a, b;
for(i = 0; i <= m; ++i) {
l[i] = [];
path[i] = [];
for(j = 0; j <= n; j++) {
l[i][j] = 0;
path[i][j] = 0;
}
}
for(i = 1; i <= m; i++) {
for(j = 1; j <= n; j++) {
if(wordX[i - 1] == wordY[j - 1]) {
l[i][j] = l[i - 1][j - 1] + 1;
path[i][j] = 1; //取左上角
} else {
a = l[i - 1][j]; //取上边
b = l[i][j - 1]; //取左边
if(b >= a){
l[i][j] = b;
path[i][j] = 2;
}else{
l[i][j] = a;
path[i][j] = 3;
}
}
}
}
return {
l:l,
p:path,
len:l[m][n]
};
}
this.getPath = function(){
var obj = this.lcs();
var p = obj.p;
var l = obj.l;
var list = [];
print(m,n,list);
function print(i,j,list){
var typ = p[i][j];
if(i==0 || j==0){
return ;
}
console.log(i,j,typ,wordX[i-1],wordY[j-1])
if(typ == 1){
print(i-1,j-1,list);
list.push(wordX[i-1]); //为1时,表示 wordx[i-1]=wordy[j-1],任意取一个
}
if(typ == 2){
print(i,j-1,list);
}
if(typ == 3){
print(i-1,j,list);
}
}
return list;
}
}
var lcs = new LCS('ABCADAB', 'BACDBA');
console.log(lcs.lcs());
console.log(lcs.getPath());
//B A D B
//l[i][j] 表示 stri , strj 最大公共子序列
//如果 str1[i] == str2[j], 则 l[i][j] = l[i-1][j-1] + 1;
//如果 str1[i] != str2[j],则 l[i][j] = max(l[i-1][j],l[i][j-1]) ;
js动态规划---最长子序列(lcs)的更多相关文章
- nyoj17-单调递增最长子序列-(dp)
17-单调递增最长子序列 内存限制:64MB 时间限制:3000ms 特判: No通过数:125 提交数:259 难度:4 题目描述: 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列 ...
- 动态规划(1)——最长子序列(LCS)问题
最长子序列问题:从中找出最长的字符序列,比如: cnblogs和belong.这两个字符串的最长子序列就是blog. 动态规划:通过分解大问题,不断的将大问题变成小问题,最终整合所有解,得出最优解(和 ...
- 【LCS,LIS】最长公共子序列、单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)
一.Description A palindrome is a symmetrical string, that is, a string read identically from left to ...
- 动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)
To the Max Time Limit:1 Second Memory Limit:32768 KB Problem Given a two-dimensional array of po ...
- nyoj 17-单调递增最长子序列 && poj 2533(动态规划,演算法)
17-单调递增最长子序列 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:21 submit:49 题目描述: 求一个字符串的最长递增子序列的长度 如 ...
- 算法:Common Subsequence(动态规划 Java 最长子序列)
Description A subsequence of a given sequence is the given sequence with some elements (possible non ...
- 动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )
1.问题描述 给定一个字符串(序列),求该序列的最长的回文子序列. 2.分析 需要理解的几个概念: ---回文 ---子序列 ---子串 http://www.cnblogs.com/LCCRNblo ...
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
一, 最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...
随机推荐
- 让jQuery的contains方法不区分大小写
// NEW selector jQuery.expr[':'].Contains = function(a, i, m) { return jQuery(a).text().toUpperCase( ...
- svn checkout 指定目录(转)
http://www.uqugu.com/blog/article/svn-checkout-specified-forder/ svn有时只想检出指定目录,对于其他的大文件目录则不想检出,如不想检出 ...
- triangular distribution
mode(众数), 一组数据中出现次数最多的那个(或那些)数值. 众数可以不存在或多于一个. 例如, 1,2,3,3,4的众数是3. 1,2,2,3,3,4的众数是2和3. 1,2,3,4,5没有众数 ...
- autofac生命周期入门(如何避免内存泄漏)
如果你是一个IOC新手,那么生命周期可能会比较难以理解.以至于谈到这个问题时,一些老手也时常表示疑虑和害怕.一个令人不安的问题就是-对象没有在合适的时机被销毁.这样一来内存的使用率就会一直攀升,直到程 ...
- 关于Java程序流程控制的整理(已完善)
- Rodrigues Formula
https://en.wikipedia.org/wiki/Rodrigues%27_formula https://en.wikipedia.org/wiki/Rodrigues%27_rotati ...
- day3_字符串常用方法
s.upper()s.lower()s.capitalize()s.split(',')s.strip('abc')s.lstrip()s.rstrip()s.replace('old','new') ...
- 2018/05/02 PHP 之错误与异常处理
在学习中,越学习越觉得自己基础薄弱. 在平常工作中,对于某些错误处理感觉不知道怎么下手,于是决定重新再整理一下. 强烈推荐这篇文章,真的感觉学习到了很多. 部分引用::再谈PHP错误与异常处理 -- ...
- 洛谷P3233 世界树 [HNOI2014] 虚树
正解:虚树 解题报告: 传送门! 首先看到这种就要想到虚树这个是毫无疑问的QwQ 建虚树什么的都可以循规蹈矩地做,不说辣,具体可以看下虚树学习笔记什么的看下板子 但是建好虚树之后怎么搞还是有点儿讲究, ...
- 并查集——合作网络D306
合作网络D306 运行时间限制:1000ms: 运行空间限制:51200KB: 试题描述 有n个结点,初始时每个结点的父结点都不存在.你的任务是执行若干次Set操作和Query ...