国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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個不同子序列,因此,窮舉法需要指數級別的運算時間。進一步分解問題特性,最長公共子序列問題實際上具有最優子結構性質。

設序列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)實例分析

構造最優解:由以上分析可知,要找出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的最長公共子序列。設數組b[i][j]記錄c[i][j]的值由哪一個子問題的解得到的,從b[m][n]開始,依其值在數組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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 99久久精品国产一区二区三区 | 99热热热热| 日韩免费一区二区 | 久久一区二区三 | 在线精品国产 | 天天干夜夜爽 | 亚洲欧美日韩一区二区 | 日韩成人免费视频 | 久久人体视频 | 在线观看日韩精品 | 欧美天天 | 在线观看一区二区三区四区 | 亚洲精品午夜 | 精品久久久久久久久久久久久久 | 成人午夜视频在线 | 欧美一区二区三区啪啪 | 久久精品亚洲 | 欧美在线电影 | 日韩美一级 | 久久精品免费 | 一区二区精品视频 | 免费观看电视在线高清视频 | 亚洲精品日本 | 成人午夜网| 黑人草逼视频 | 国产免费成人 | 国产成人精品一区二区三区 | 成人影院一区二区 | 亚洲免费视频观看 | 午夜精品久久久久久久男人的天堂 | 亚洲精品一区二区网址 | 一级爱| 91av亚洲 | 在线观看免费黄视频 | 国产精品成人一区二区三区 | 伊人精品在线 | 麻豆乱码国产一区二区三区 | 中文字幕精品一区 | 久久精品一区二区三区四区 | 欧美在线视频网站 | 国产精品无码永久免费888 |