【动态规划】求最大公共子序列

原创 2018年04月15日 14:45:59

算法没搞好啊!!

#include<iostream>
#include<string>
using namespace std;
const int MAX = 100; 

void LCSLength(string x, string y, int xlen, int ylen, int c[][MAX], int b[][MAX])
{
	int i, j;
	for(i = 0; i <= xlen ; i++)
	    c[i][0] = 0;
	for(j = 0; j <= ylen ; j++)
	    c[0][j] = 0;
	for(i = 1; i <= xlen ; i++){
		for(j = 1 ; j <= ylen ; j++){
			if(x[i-1] == y[j-1]){
				c[i][j] = c[i-1][j-1] + 1;
				b[i][j] = 0;		
			}
			else if(c[i-1][j] >= c[i][j-1]){
				c[i][j] = c[i-1][j];
				b[i][j] = 1;		
			}
			else{
				c[i][j] = c[i][j-1];
				b[i][j] = -1;
			}
		}
	}
}

void PrintLCS(string x, int b[][MAX], int i, int j)
{
	if(i == 0 || j == 0)
	   return;
	if(b[i][j] == 0){
		// cout<< x[i-1] <<' '; //逆序输出 
		PrintLCS(x, b, i-1, j-1);
		cout<< x[i-1] <<' ';//注意次序 ,顺序输出 
	}
	else if(b[i][j] == 1){
		PrintLCS(x, b, i-1, j);
	}
	else{
		PrintLCS(x, b, i, j-1);
	}
}

int main()
{
	string x = "abcdefggigk" ;
	string y = "acdefhglkm" ;
	int xlen = x.length();
	int ylen = y.length();
	int b[MAX][MAX];
	int c[MAX][MAX];
	LCSLength(x, y, xlen, ylen, c, b);
    PrintLCS(x,b,xlen,ylen);
   	cout<<endl;
}

动态规划 最长公共子序列 过程图解

1.基本概念       首先需要科普一下,最长公共子序列(longest common sequence)和最长公共子串(longest common substring)不是一回事儿。什么是子序...
  • hrn1216
  • hrn1216
  • 2016-05-29 22:54:25
  • 53404

java动态规划 实现输出最大公共子序列的长度以及输出最大子字符串

参考博客地址:http://blog.csdn.net/biangren/article/details/8038605 动态规划法        分治法是指将问题划分成一些独立的子问题,递归地求...
  • njr465167967
  • njr465167967
  • 2016-06-14 23:11:06
  • 2707

javascript写算法(一) 动态规划:最长公共子序列

csdn是疯了吗,是baidu算出来的广告嵌在了iframe里,fixed to viewport,之前一直用的c++写算法,在std的基础上javascript的“人造性”更强,比如数组和字符串都有...
  • github_36487770
  • github_36487770
  • 2017-03-26 22:35:48
  • 983

动态规划:求最长公共子串/最长公共子序列

最长公共子序列和最长公共子串区别        最长公共子串(Longest Common Substring)与最长公共子序列(Longest Common Subsequence)的区别: 子串要...
  • u013074465
  • u013074465
  • 2015-04-30 11:30:58
  • 13873

最长公共子序列python实现

最长公共子序列是动态规划基本题目,下面按照动态规划基本步骤解出来。 1.找出最优解的性质,并刻划其结构特征 序列a共有m个元素,序列b共有n个元素,如果a[m-1]==b[n-1],那么a[:m]和b...
  • littlethunder
  • littlethunder
  • 2014-05-12 17:05:26
  • 10810

动态规划算法之最长公共子序列问题

一、问题描述 求两个字符序列的公共最长子序列。例如字符序列abcbdb和字符序列acbbabdbb的最长公共子序列为acbdb。 二、问题分析 用L[i][j]表示子序列xi和yj的最长公共子序列的长...
  • tterminator
  • tterminator
  • 2016-03-24 16:56:03
  • 5796

动态规划基础篇之最长公共子序列问题

一些概念: (1)子序列: 一个序列A = a1,a2,……an,中任意删除若干项,剩余的序列叫做A的一个子序列。也可以认为是从序列A按原顺序保留任意若干项得到的序列。 例如: 对序列 ...
  • lz161530245
  • lz161530245
  • 2017-08-08 21:12:15
  • 8820

最长公共子序列VS最长连续公共子序列

最长公共子序列、最长连续公共子序列
  • TQH_Candy
  • TQH_Candy
  • 2016-10-06 16:46:01
  • 678

Java-LCS最长公共子序列(动态规划实现)

一个序列S任意删除若干个字符得到新序列T,则T称为S的子序列。若两个序列X和Y的公共子序列中,长度最长的那个字序列称为X和Y的最长公共子序列(LCS)。 Xi表示字符串的前i个字符,Yj表示字符串的前...
  • qq_30507287
  • qq_30507287
  • 2016-10-16 14:40:20
  • 3488

最长公共子序列Java代码实现

最长公共子序列定义:两个或多个已知数列的子序列集合中最长的就是最长公共子序列。 比如数列A = “abcdef”和B = “adefcb”,那么两个数列的公共子序列集合有{”a","ab","abc...
  • fjssharpsword
  • fjssharpsword
  • 2016-07-19 11:08:43
  • 7203
收藏助手
不良信息举报
您举报文章:【动态规划】求最大公共子序列
举报原因:
原因补充:

(最多只允许输入30个字)