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)的更多相关文章

  1. nyoj17-单调递增最长子序列-(dp)

    17-单调递增最长子序列 内存限制:64MB 时间限制:3000ms 特判: No通过数:125 提交数:259 难度:4 题目描述: 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列 ...

  2. 动态规划(1)——最长子序列(LCS)问题

    最长子序列问题:从中找出最长的字符序列,比如: cnblogs和belong.这两个字符串的最长子序列就是blog. 动态规划:通过分解大问题,不断的将大问题变成小问题,最终整合所有解,得出最优解(和 ...

  3. 【LCS,LIS】最长公共子序列、单调递增最长子序列

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4   输入 ...

  4. Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)

    一.Description A palindrome is a symmetrical string, that is, a string read identically from left to ...

  5. 动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)

    To the Max Time Limit:1 Second     Memory Limit:32768 KB Problem Given a two-dimensional array of po ...

  6. nyoj 17-单调递增最长子序列 && poj 2533(动态规划,演算法)

    17-单调递增最长子序列 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:21 submit:49 题目描述: 求一个字符串的最长递增子序列的长度 如 ...

  7. 算法:Common Subsequence(动态规划 Java 最长子序列)

    Description A subsequence of a given sequence is the given sequence with some elements (possible non ...

  8. 动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )

    1.问题描述 给定一个字符串(序列),求该序列的最长的回文子序列. 2.分析 需要理解的几个概念: ---回文 ---子序列 ---子串 http://www.cnblogs.com/LCCRNblo ...

  9. 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹

    一,    最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...

随机推荐

  1. rxjs 常用的静态操作符

    操作符文档 API create const { Observable } = require('rxjs'); // 创建 Observables var observable = Observab ...

  2. Django----ModelFrom

    ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...

  3. NFS使用autofs自动挂载

    NFS自动挂载设置在/etc/fstab和/etc/rc.local可能挂载不成功,假如是服务端NFS宕机还可能导致客户端无法启动,可以使用autofs实现自动挂载 安装autofs yum -y i ...

  4. db2pd工具

    内容 概览 简介 使用 db2pd 工具 监控的例子 db2pd 工具 用于监控 DB2 实例和数据库的新的 DB2 UDB 工具 简介 DB2 UDB V8.2 带来了一种新工具称为 db2pd,用 ...

  5. .NET Core类库项目中如何读取appsettings.json中的配置

    这是一位朋友问我的问题,写篇随笔回答一下.有2种方法,一种叫丑陋的方法 —— IConfiguration ,一种叫优雅的方法 —— IOptions . 1)先看丑陋的方法 比如在 RedisCli ...

  6. [No0000F2]ip安全监视器

    IPSec快速式策略 @echo off :again set num= set fastpolicyname= set issoft= set livetime= set fps= setlocal ...

  7. easyUI表格多表头实现

    项目中要实现表格多表头,结合网上的例子自己实现了一个,包含frozenColumns情况. 一,通过标签创建 效果: <table id="schoolGrid" class ...

  8. 内部排序->插入排序->其它插入排序->折半插入排序

    文字描述 和直接插入排序比较,只是把“查找”操作利用“折半查找”来实现,由此进行的插入排序叫做折半插入排序. 示意图 略 算法分析 和直接插入排序比,减少了比较次数,但是移动次数没有变,所以折半插入排 ...

  9. 对称加密----AES和DES加密、解密

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...

  10. 2017-2018-2 20165336 实验四《Android开发基础》实验报告

    20165336 实验四 Android程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:康志强 学号:20165336 指导教师:娄嘉鹏 实验日期:2018年5月14日 实 ...