动态规划法解最长公共子序列<算法分析>
一、实验内容及要求
1.要求按动态规划法原理求解问题;
2.要求在20以内整数随机产生两个序列数据;
3.要求显示随机产生的序列及最长公共子序列。
二、实验步骤
1、随机产生数列;
2、输出随机序列;
2、计算公共序列后,输出公共序列。
Java源代码:
package suanfafenxi;
import java.util.Random;
public class shiyan4 {
static int langth=10; //随机字符串的长度
static int[] x = new int[langth];
static int[] y= new int[langth];
static int [][]b=new int [ langth][langth];
//产生随机字符串x函数
public static void suijishux(){
Random rad=new Random(); //产生随机数
for (int i = 0; i<langth; i ++)
{
x[i] = rad.nextInt(20);
}
}
//产生随机字符串Y函数
public static void suijishuy(){
Random rad=new Random(); //产生随机数
for (int i = 0; i<langth; i ++)
{
y[i] = rad.nextInt(20);
}
}
//输出随机字符串X函数
public static void prinfx(){
System.out.print("随机字符串X:");
for (int i = 1; i < langth; i ++)
{
System.out.print("["+x[i]+"] "); }
}
//输出随机字符串Y函数
public static void prinfy(){
System.out.print("\n随机字符串Y:");
for (int i = 1; i < langth; i ++)
{
System.out.print("["+y[i]+"] "); }
} //主函数
public static void main(String[] args) {
try
{
suijishux();
System.out.println("随机序列X生成功。。。。");
}
catch(Exception e)
{
System.out.println("随机序列X生成失败!!");
}
try
{
suijishuy();
System.out.println("随机序列Y生成功。。。。");
}
catch(Exception e)
{
System.out.println("随机序列Y生成失败!!");
}
prinfx();
prinfy();
shiyan4 shiyan=new shiyan4();
shiyan.mixLength(x,y,b);
System.out.println("\nX和Y的最长公共子序列 是:");
shiyan.bijiaojieguo(langth-1,langth-1,x,b);
}
public void mixLength(int []x,int []y,int [][]b){
int [][]c=new int[langth][langth];
for (int i=1;i<langth;i++) c[i][0]=0;
for (int i=1;i<langth;i++) c[0][i]=0;
for(int i=1;i<langth;i++) for(int j=1;j<langth;j++){ if(x[i]==y[j]){ c[i][j]=c[i-1][j-1]+1;
b[i][j]=1;
} else if(c[i-1][j]>=c[i][j-1]){ c[i][j]=c[i-1][1];
b[i][j]=2; }
else{ c[i][j]=c[i][j-1];
b[i][j]=3;
}
}
}
public void bijiaojieguo(int i,int j,int []x,int[][]b){
if(i==0 || j==0) return;
if(b[i][j]==1){
bijiaojieguo(i-1,j,x,b);
System.out.print(x[i]+" ");
}
else if (b[i][j]==2) bijiaojieguo(i-1,j,x,b);
else bijiaojieguo(i,j-1,x,b);
}
} 运行结果如下:



动态规划法解最长公共子序列<算法分析>的更多相关文章
- 《算法导论》读书笔记之动态规划—最长公共子序列 & 最长公共子串(LCS)
From:http://my.oschina.net/leejun2005/blog/117167 1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要 ...
- 动态规划法(十)最长公共子序列(LCS)问题
问题介绍 给定一个序列\(X=<x_1,x_2,....,x_m>\),另一个序列\(Z=<z_1,z_2,....,z_k>\)满足如下条件时称为X的子序列:存在一个严格 ...
- 经典递归问题:0,1背包问题 kmp 用遗传算法来解背包问题,hash表,位图法搜索,最长公共子序列
0,1背包问题:我写笔记风格就是想到哪里写哪里,有很多是旧的也没删除,代码内部可能有很多重复的东西,但是保证能运行出最后效果 '''学点高大上的遗传算法''' '''首先是Np问题的定义: npc:多 ...
- Python-求解两个字符串的最长公共子序列
一.问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB.则这两个字符串的最长公共子序列长 ...
- 51nod 1006 最长公共子序列Lcs(经典动态规划)
传送门 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是 ...
- UVa 111 - History Grading (by 最长公共子序列 )
History Grading Background Many problems in Computer Science involve maximizing some measure accor ...
- LCS最长公共子序列(最优线性时间O(n))
这篇日志主要为了记录这几天的学习成果. 最长公共子序列根据要不要求子序列连续分两种情况. 只考虑两个串的情况,假设两个串长度均为n. 一,子序列不要求连续. (1)动态规划(O(n*n)) (转自:h ...
- 算法导论-动态规划(最长公共子序列问题LCS)-C++实现
首先定义一个给定序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果,其形式化定义如下:给定一个序列X = <x1,x2 ,..., xm>,另一个序列Z =<z1,z2 ...
- 最长公共子序列(LCS问题)
先简单介绍下什么是最长公共子序列问题,其实问题很直白,假设两个序列X,Y,X的值是ACBDDCB,Y的值是BBDC,那么XY的最长公共子序列就是BDC.这里解决的问题就是需要一种算法可以快速的计算出这 ...
随机推荐
- 2-SAT问题(白书)
1. 定义 给定一个布尔方程,判断是否存在一组布尔变量的真值指派使整个方程为真的问题,被称为布尔方程的可满足性问题(SAT).SAT问题是NP完全的,但对于满足一定限制条件的SAT问题,还是能够有效求 ...
- 牛客小白月赛5-I-区间(差分求前缀和+一次暴力统计)
题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作: 操作一:将a[L]-a[R]内的元素都加上P 操作二:将a[L]-a[R]内的元素都 ...
- JUnit单元测试&注解
①测试方法上必须使用@Test进行修饰 ②测试方法必须使用public void 进行修饰,不能带任何的参数 ③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开 ④测试类所在的包 ...
- 安装Kube
安装Docker yum install -y docker 加速Docker DOCKER_MIRRORS="https://5md0553g.mirror.aliyuncs.com&qu ...
- HBase Region Assign流程详解
Hbase是kv存储,但是逻辑上我们可以把存储在hbase上的kv数据当成表,rowkey可以认为是表的主键.为了便于分布式操作,hbase会把表横向切分成一块一块的数据,而每块就是一个Region. ...
- SpringIOC学习_属性注入(依赖注入)
一.应用场景:Spring会帮创建实现类的实例,但是有时候我们还需要在类中设置一些属性用于传入设置值,这些跟类紧密关联的属性就叫依赖,通过spring帮忙设置的过程叫依赖注入. 二.依赖注入的实现 A ...
- TabLayout+ViewPager实现标签卡效果
转载请注明原文地址:http://www.cnblogs.com/yanyojun/p/8082391.html 代码已经上传至Github:https://github.com/YanYoJun/V ...
- pandas 选择某几列
转自:https://blog.csdn.net/aaa_aaa1sdf/article/details/77414387 col_n = ['名称','收盘价','日期'] a = pd.DataF ...
- axis2客户端的几种调用方式
(1)使用RPC方式调用WebService // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient( ...
- servlet 生命周期 与 初始化
一. 生命周期 Servlet 通过调用 init () 方法进行初始化. Servlet 调用 service() 方法来处理客户端的请求. Servlet 通过调用 destroy() 方法终止( ...