一、实验内容及要求
 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);
}
} 运行结果如下:


动态规划法解最长公共子序列<算法分析>的更多相关文章

  1. 《算法导论》读书笔记之动态规划—最长公共子序列 & 最长公共子串(LCS)

    From:http://my.oschina.net/leejun2005/blog/117167 1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要 ...

  2. 动态规划法(十)最长公共子序列(LCS)问题

    问题介绍   给定一个序列\(X=<x_1,x_2,....,x_m>\),另一个序列\(Z=<z_1,z_2,....,z_k>\)满足如下条件时称为X的子序列:存在一个严格 ...

  3. 经典递归问题:0,1背包问题 kmp 用遗传算法来解背包问题,hash表,位图法搜索,最长公共子序列

    0,1背包问题:我写笔记风格就是想到哪里写哪里,有很多是旧的也没删除,代码内部可能有很多重复的东西,但是保证能运行出最后效果 '''学点高大上的遗传算法''' '''首先是Np问题的定义: npc:多 ...

  4. Python-求解两个字符串的最长公共子序列

    一.问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB.则这两个字符串的最长公共子序列长 ...

  5. 51nod 1006 最长公共子序列Lcs(经典动态规划)

    传送门 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是 ...

  6. UVa 111 - History Grading (by 最长公共子序列 )

     History Grading  Background Many problems in Computer Science involve maximizing some measure accor ...

  7. LCS最长公共子序列(最优线性时间O(n))

    这篇日志主要为了记录这几天的学习成果. 最长公共子序列根据要不要求子序列连续分两种情况. 只考虑两个串的情况,假设两个串长度均为n. 一,子序列不要求连续. (1)动态规划(O(n*n)) (转自:h ...

  8. 算法导论-动态规划(最长公共子序列问题LCS)-C++实现

    首先定义一个给定序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果,其形式化定义如下:给定一个序列X = <x1,x2 ,..., xm>,另一个序列Z =<z1,z2  ...

  9. 最长公共子序列(LCS问题)

    先简单介绍下什么是最长公共子序列问题,其实问题很直白,假设两个序列X,Y,X的值是ACBDDCB,Y的值是BBDC,那么XY的最长公共子序列就是BDC.这里解决的问题就是需要一种算法可以快速的计算出这 ...

随机推荐

  1. _bzoj1087 [SCOI2005]互不侵犯King【dp】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1087 令f(i, j, k)表示前i列,二进制状态为j,已经用了k个国王的方案数,则 f(i ...

  2. hdu 1430 魔板 康托展开 + 很好的映射

    http://acm.hdu.edu.cn/showproblem.php?pid=1430 如果从start ---> end,每一次都bfs进行,那么就肯定会超时. 考虑到先把start映射 ...

  3. MYSQL5.7 忘记ROOT密码/初始化ROOT密码

    编辑my.cnf允许空密码登录 [root@7Core ~]# vi /etc/my.cnf #在[mysqld]下加入一行 skip-grant-tables=1 重新启动Mysql服务 [root ...

  4. Objective-C Foundation 框架 Example :Looking for Files 查找文件

    Objective-C Foundation 框架    Example :Looking for Files  查找文件 NSFileManager. The NSFileManager class ...

  5. QScrollArea不能显示滚动条

    转载请注明出处:http://www.cnblogs.com/dachen408/p/7147141.html 问题:QScrollArea不能显示滚动条 解决方案:设置QScrollArea-> ...

  6. Node.js——请求头

    var http = require('http') var server = http.createServer(); server.on('request', function (req, res ...

  7. inux 软件编译、安装、删除

    640?wx_fmt=otherimage.png 本文学习内容 手动安装软件 手动安装下载源码的软件 源码编译3步骤 deb包-包依赖管理 dekg -l 查看所以安装deb的包 apt-get仓库 ...

  8. JS Object 属性判断

    in 方法 var shapeInfo = {name:“lium”}; if (“name” in shapeInfo) {...}

  9. CAD交互绘制直线(com接口)

    用户可以在控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE dY ...

  10. 【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区

    目录 00. 目录 01. COORD结构体 02. SMALL_RECT结构 03. CONSOLE_SCREEN_BUFFER_INFO结构体 04. GetConsoleScreenBuffer ...