一、实验内容及要求
 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. 移动web开发基础(一)——像素

    这篇文章要弄清楚2个问题:一.什么是逻辑像素和物理像素:二.这两者有什么关系. 对于问题一,先抛出两个概念.我们经常使用的px就是逻辑像素,是浏览器使用的抽象单位:物理像素又和dp/pt(设备无关像素 ...

  2. Maximum Subsequence Sum 最大子序列和的进击之路

    本文解决最大子序列和问题,有两个题目组成,第二个题目比第一个要求多一些(其实就是要求输出子序列首尾元素). 01-复杂度1 最大子列和问题   (20分) 给定KK个整数组成的序列{ N1​​, N2 ...

  3. kubernetesV1.13.1一键部署脚本(k8s自动部署脚本)

    部署k8sv1.13.1只需要下面几步就OK了: git clone https://github.com/luckman666/deploy_Kubernetes-v1.13.1.git cd de ...

  4. windows 下使用sqlplus

    1.连接数据库 找到tnsnames.ora 监听器配置 TESTDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = "服务器端ip ...

  5. php中字符与字节的区别

    字符: 字符是可使用多种不同字符方案或代码页来表示的抽象实体.例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字 ...

  6. iOS之NSAttributedString-------字符属性

    NSAttributedString 字符属性 字符属性可以应用于 attributed string 的文本中. NSString *const NSFontAttributeName;(字体) N ...

  7. vue工程化与路由router

    一.介绍     vue.js 是 目前 最火的前端框架,vue.js 兼具 angular.js 和 react.js 的优点,并剔除它们的缺点.并且提供了很多的周边配套工具 如vue-router ...

  8. ubuntu 18.04 安装.net core

    要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系那就只好在琢磨了,然后就发现了在github有安装的方法因为是18.04 所以 wget -qO- https://packages.micro ...

  9. XP禁用了U盘和移动硬盘方法

    会不会是你XP禁用了U盘和移动硬盘下面这些是任何禁用U盘的!你自己反着试下嘛!方法一,BIOS设置法(快刀斩乱麻法) 进入BIOS设置,选择“Integrated Peripherals”选项,展开后 ...

  10. redis简介以及安装

    redis作为开源的高性能的键值对数据库,本身是单线程的,性能虽然没有memcache高,但是也是性能跟memcache相差无几的,memcache是多线程的,但是redis本身功能更加强大,学习一下 ...