一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Java算法之最長公共子序列問題(LCS)實例分析

Java算法之最長公共子序列問題(LCS)實例分析

2021-02-21 11:09萌神哆啦A夢 JAVA教程

這篇文章主要介紹了Java算法之最長公共子序列問題(LCS),結合實例形式分析了最長公共子序列的原理及問題解決方法,需要的朋友可以參考下

本文實例講述了java算法最長公共子序列問題(lcs)。分享給大家供大家參考,具體如下:

問題描述:一個給定序列的子序列是在該序列中刪去若干元素后得到的序列。確切地說,若給定序列x= { x1, x2,…, xm},則另一序列z= {z1, z2,…, zk}是x的子序列是指存在一個嚴格遞增的下標序列 {i1, i2,…, ik},使得對于所有j=1,2,…,k有 xij=zj。例如,序列z={b,c,d,b}是序列x={a,b,c,b,d,a,b}的子序列,相應的遞增下標序列為{2,3,5,7}。給定兩個序列x和y,當另一序列z既是x的子序列又是y的子序列時,稱z是序列x和y的公共子序列。例如,若x= { a, b, c, b, d, a, b}和y= {b, d, c, a, b, a},則序列{b,c,a}是x和y的一個公共子序列,序列{b,c,b,a}也是x和y的一個公共子序列。而且,后者是x和y的一個最長公共子序列,因為x和y沒有長度大于4的公共子序列。給定兩個序列x= {x1, x2, …, xm}和y= {y1, y2, … , yn},要求找出x和y的一個最長公共子序列。

問題解析:設x= { a, b, c, b, d, a, b},y= {b, d, c, a, b, a}。求x,y的最長公共子序列最容易想到的方法是窮舉法。對x的多有子序列,檢查它是否也是y的子序列,從而確定它是否為x和y的公共子序列。由集合的性質知,元素為m的集合共有2^m個不同子序列,因此,窮舉法需要指數(shù)級別的運算時間。進一步分解問題特性,最長公共子序列問題實際上具有最優(yōu)子結構性質。

設序列x={x1,x2,……xm}和y={y1,y2,……yn}的最長公共子序列為z={z1,z2,……zk}。則有:

(1)若xm=yn,則zk=xm=yn,且zk-1是xm-1和yn-1的最長公共子序列。
(2)若xm!=yn且zk!=xm,則z是xm-1和y的最長公共子序列。
(3)若xm!=yn且zk!=yn,則z是xyn-1的最長公共子序列。
其中,xm-1={x1,x2……xm-1}yn-1={y1,y2……yn-1},zk-1={z1,z2……zk-1}

遞推關系:用c[i][j]記錄序列xi和yj的最長公共子序列的長度。其中,xi={x1,x2……xi}yj={y1,y2……yj}。當i=0或j=0時,空序列是xi和yj的最長公共子序列。此時,c[i][j]=0;當i,j>0,xi=yj時,c[i][j]=c[i-1][j-1]+1;當i,j>0,xi!=yj時,
c[i][j]=max{c[i][j-1],c[i-1][j]},由此建立遞推關系如下:

Java算法之最長公共子序列問題(LCS)實例分析

構造最優(yōu)解:由以上分析可知,要找出x={x1,x2,……xm}和y={y1,y2,……yn}的最長公共子序列,可以按一下方式遞歸進行:當xm=yn時,找出xm-1和yn-1的最長公共子序列,然后在尾部加上xm(=yn)即可得x和y的最長公共子序列。當xm!=yn時,必須解兩個子問題,即找出xm-1和y的一個最長公共子序列及x和yn-1的一個最長公共子序列。這兩個公共子序列中較長者為x和y的最長公共子序列。設數(shù)組b[i][j]記錄c[i][j]的值由哪一個子問題的解得到的,從b[m][n]開始,依其值在數(shù)組b中搜索,當b[i][j]=1時,表示xi和yj的最長公共子序列是由xi-1和yj-1的最長公共子序列在尾部加上xi所得到的子序列。當b[i][j]=2時,表示xi和yj的最長公共子序列與xi-1和yj-1的最長公共子序列相同。當b[i][j]=3時,表示xi和yj的最長公共子序列與xi和yj-1的最長公共子序列相同。

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package lcs;
public class lcs {
  public static int[][] lcslength ( string[] x, string[] y) {
    int m = x.length;
    int n = y.length;
    int[][] b = new int[x.length][y.length];
    int[][] c = new int[x.length][y.length];
    for(int i = 1; i < m; i++) {
      c[i][0] = 0;
    }
    for(int i = 1; i < n; i++) {
      c[0][i] = 0;
    }
    for(int i = 1; i < m; i++) {
      for(int j = 1; j < n; 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][j];
          b[i][j] = 2;
        }
        else {
          c[i][j] = c[i][j-1];
          b[i][j]=3;
        }
      }
    }
    return b;
  }
  public static void lcs(int[][] b, string[] x, int i, int j) {
    if(i == 0|| j == 0) return;
    if(b[i][j] == 1) {
      lcs(b,x,i - 1, j - 1);
      system.out.print(x[i] + " ");
    }
    else if(b[i][j] == 2) {
      lcs(b,x,i - 1, j);
    }
    else lcs(b,x,i, j-1);
  }
  public static void main(string args[]) {
    system.out.println("服務器之家測試結果:");
    string[] x = {" ","a", "b", "c", "b", "d", "a", "b"};
    string[] y = {" ","b", "d", "c", "a", "b", "a"};
    int[][] b = lcslength(x, y);
    system.out.println("x和y的最長公共子序列是:");
    lcs(b, x, x.length - 1, y.length - 1);
  }
}

運行結果:

Java算法之最長公共子序列問題(LCS)實例分析

希望本文所述對大家java程序設計有所幫助。

原文鏈接:http://blog.csdn.net/u014755255/article/details/50571192

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91精品国产91久久久久久麻豆 | 极品美女写真菠萝蜜视频 | 亚洲成年网站在线观看 | 国产精品网站在线观看 | 免费欧美日韩 | 色综合久久日韩国产 | 新影音先锋男人色资源网 | 久久r视频| 996热视频 | 女教师巨大乳孔中文字幕免费 | 四虎成人永久地址 | 24adc年龄18岁欢迎大驾光临 | 高清国产精品久久久久 | 免费在线影院 | 久久这里只精品热在线18 | 日韩基地1024首页 | 日本在线视频网址 | 久草在线精彩免费视频 | 日本videossexx日本人 | 牛牛影院成人免费网页 | 性关系免费视频 | 亚州一区二区 | 无人在线视频高清免费观看动漫 | 成人在线小视频 | 国产乱子伦在线观看不卡 | 91手机看片国产永久免费 | 国产在线播放一区 | 午夜福利试看120秒体验区 | 久久三级视频 | 成人网视频免费播放 | 国产精品微拍 | 美女扒开奶罩让男人吃奶 | 搡60一70岁的老女人小说 | 国产一卡二卡3卡4卡四卡在线 | 揉搓喷水h | 99精品国产美女福到在线不卡 | 国产精品亚洲片夜色在线 | 火影小南被爆羞羞网站 | 久久久91精品国产一区二区 | 精品国产自在天天线2019 | 男人日女人的b |