達成__java最長共通部分列

キーコード:

以下のために(INT I = 1; I <= x.length; iは++){ 
ための(int型J = 1; J <= y.lengthあり、j ++){
IF(X [I-1] == Y [J-1] ){
C [I] [J] = Cの[I-1] [J-1] +1。
B [i] [j]は= 1。
}他{
IF(C [I-1]〜[J]> = C [I] [J-1]){
C [I] [J] = C [I-1]〜[J]。
B [i] [j]は2 =。
}他{
C [I] [J] = C [I] [J-1]。
B [i] [j]は= 3。
}
}
}
}

上記、I = 0又はJ = 0、すなわち、XまたはYは、空のシーケンス、C [I] [J] = 0です。

 

完全なコード:

{クラスZCGGZXL公開
    / ** 
     *最長共通部分列
     * 
     *質問:
     *与えられた二つの配列X = {X1、X2、... 、XN} とY = {Y1、Y2、... ,, YN }、XおよびYの最長共通サブシーケンスを見つけます。
     * 
     *テスト入力:
     * ABCBDAB 
     * BDCABA 
     *テスト出力:
     * 4 
     * BCBA 
     * / 

    パブリック静的な無効メイン(文字列引数[]){ 
        CHAR [] X = { 'A'、 'B'、 'C'、「B '' D '' A '' B '}; 
        [] Y = {char型' B '' D '' C '' A '' B '' A「を}; 
        INT [] [ 。。] B =新しい新しいINT [x.length用+ 1] [y.length用+ 1]; 
        INT [] [] = lcsLength C(X、Y、B)
        のSystem.out.println(C [x.length] [Y 。長さ])。
        LCS(x.length、y.length、X、B)。
    }

    / ** 
     *入力:X配列、Y配列
     *出力:B配列は、配列cを返します。
     * C [I]、[J]に格納されたXi及びYjとの最長共通サブシーケンスの長さ
     値* B [i] [j]が、Cを記録で得られたサブ問題の解である[I] [J]最長共通部分列を構築するときに使用します。
     @return * 
     * / 
    パブリック静的INT [] [] lcsLength {(CHAR [] X、[] YをCHAR、[] [] B INT)
        //が配列Cの初期化
        のint [] [] = C新しい新しいINT [x.lengthを+1] [y.length + 1]; // 0は空のシーケンスを保持
        するための(INT I = 0;私はc.lengthを<; Iは++){ 
            ため(INT J = 0; J <C [0] .LENGTH; J ++ ){ 
                C [I] [J] = 0; 
            } 
        } 
        計画を開始// 
        (INT I = 1; I <= x.length; Iは++){ 
            (INT 1 = J; J <= y.length; J ++ ){ 
                IF(X [I-1] == Y [J-1]){
                    Cは、[I]は[J]は= C [1-I]、[J-1]を+1しました; 
                    B [I] [J] = 1; 
                }他{ 
                    IF(Cする[1-I] [J]> = C [ I]、[J-1])。{ 
                        C [I] [J] = C [I-1]〜[J]; 
                        B [I] [J] = 2; 
                    }そうでなければ{ 
                        C [I] [J] = C [ I]、[J-1]; 
                        B [I] [J] = 3; 
                    } 
                } 
            } 
        } 
        戻りC; 
    } 

    パブリック静的ボイドLCSは、(Iは、J int型int型、charは[] X、B [] [] INT){ 
        //終了条件
        IF(I == 0 || J == 0)のリターン; 

        // Bの分析[I] [j]は異なるブランチに
        IF(B [I] [J ] == 1){
            LCS(I-1、J-1、X、B)。 
            System.out.print(X [I-1])の。
        }他{ 
            (B [I] [J] == 2)もしLCS(I-1、J、X、B)。
            他のLCS(I、J-1、X、B)。
        } 
    } 
}
  

  

おすすめ

転載: www.cnblogs.com/wainzhang/p/10945670.html