• 动态规划法解最长公共子序列<算法分析>


    一、实验内容及要求
     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("
    随机字符串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("
    X和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);	
    	}
    }

    运行结果如下:

     

  • 相关阅读:
    appium启动android和iOS真机
    文本编辑器Sublime Text 3 -mac版简体中文汉化教程
    Navicat Premium Mac 安装
    mac下安装jmeter
    Pycharm 配置git
    mac下jdk安装配置
    WebDriverAgentRunner安装成功后build的常见报错
    WebDriverAgent入门篇-安装和使用
    macOS升级
    Bash on windows从14.0升级到ubuntu16.04
  • 原文地址:https://www.cnblogs.com/soulsjie/p/6829426.html
Copyright © 2020-2023  润新知