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.autocomplete事件
在工作中经常需要生成动态增加行的表格,此次需要对表格中的文本框绑定autocomplete功能 操作流程: 表格初始时只有一行,当页面加载时执行先执行一次增加行功能,将行增加到10行 在$(funct ...
- Nodejs----登录验证
1. 写在前面 当我们登录了一个网站,在没有退出登录的情况下,我们关闭了这个网站 ,过一段时间,再次打开这个网站,依然还会是登录状态.这是因为,当我们登录了一个网站,服务器会保存我们的登录状态,直到我 ...
- css学习_文本有关的样式属性、sublime快捷生成标签
1.css中color定义文本的颜色 写法:(最常用的是16进制的) 2.行间距 line-height 3.水平对齐方式 text-align left right center 4.首 ...
- [No0000106]配置PLSQL,提升工作效率
界面模板的配置: 方便用户快速点击需要的功能.如打开SQL Window 1.打开customize,用户自定义Toolbars对话框. 2.在Commands命令标签页,选中要添加的命令,拖动到工具 ...
- python模块之__future__模块
Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了.为了在低版本中可以使用高版本的新特性 ...
- php之二叉树
二叉树的特点: ①.每个节点最多有两个子树,所以二叉树中不存在度大于2的节点.注意不是只有两个子树,最多有两个子树,没有子树或者只有一颗子树都是可以的. ②左子树和右子树是有顺序的. ③即使树中只有一 ...
- day4_处理json
说明:#json是一种通用的数据类型,所有的语言都认识.#k - v {}#json串就是一个字符串,不能根据key-value取值#json可以转成字典#json串就是字符串,可放在三引号中校验js ...
- scala-高阶函数
//1类似于lambda表达式的函数直接量====================== var get = (name: String) => { println(123 + name) } g ...
- vue打包后出现"Failed to load resource: net::ERR_FILE_NOT_FOUND"错误
创建vue脚手架搭建项目之后,用npm run build经行打包,运行index.html后出现异常: 打开dist/index.html, 诸如这些的,引入是有问题的, 这边的全部是绝对路径,而本 ...
- MapStruct
一.Object mapping 的技术分类: 运行期 反射调用set/get 或者是直接对成员变量赋值 . 该方式通过invoke执行赋值,实现时一般会采用beanutil, Javassist等开 ...