スパース配列(javaは達成)

1.スパース配列

配列内の要素のほとんどは、0、または同一の配列の値である場合、疎なアレイは、アレイを保持するために使用することができます。治療法のスパース配列は以下のとおりです。

1. いくつかの奇数行の合計のアレイを記録し、どのように多くの異なる値

1.2このように、プログラムIの大きさを減少させる、小規模のアレイに記録素子列の値と異なる値を有します

2.アイデアのスパース配列に2次元配列

2.1。元の2次元アレイのトラバーサル、有効データ数取得和

2.2。あなたがint sparseArrのまばらな配列を作成することができますよると合計合計+ 1を

2. スパースアレイへのデータの二次元アレイに前記有効データ

独創的なアイデアの二次元アレイ3.スパースアレイ

3.1。のような、元の2次元配列を作成するために、最初の行のデータによれば、疎な配列の最初の行を読み取るために上記INT = chessAr2 。11

3. スパースアレイの数行を読んだ後のデータ2.とは、元の2次元アレイに割り当てることができます。

4.アプリケーション例

スパースアレイを使用して、以前の二次元アレイ(チェッカーボード、地図、等)疎な配列を保存するために、することができるが保持する類似の分析の数の全体的なアイデアの元の2次元アレイを再リストア

パブリック クラスSparseArray {
     公共 静的 ボイドメイン(文字列[]引数){
 // 表す2次元配列を作成する黒2が表す青色0表すヌル
        INT chessarr1 [] [] = 新しい新しい INT [11] [11 ]。
        chessarr1 [ 1] [2] = 1 
        chessarr1 [ 2] = 2 [3] ;
         // トラバーサルサイクルの二次元アレイ 
        のSystem.out.println( "元の二次元アレイ" のためにINT []行:chessarr1){
             ためのint型データ:行){
                System.out.printf( "%d個の\ tの" 、データ);
            }
            System.out.println();
        }
        // これにより多数の非ゼロ元の2次元アレイを反復
        INT SUM = 0 ;
         のためint型 I = 0;私は<11; I ++は){
             ためINT J = 0; J <11; J ++ ){
                 IF( chessarr1 [I]、[J]!= 0 ){
                    合計 ++ ;
                }
            }
        }
        // 疎なアレイの対応作成
        int型 sparsearr [] [] = 新しい新しい INT [SUM + 1] [3。];
         // 疎なアレイコピーする 
        sparsearr [0] [0] = 11 ;
        sparsearr [ 0] [1] = 11 
        sparsearr [ 0] [2] = SUM;
         //はsparsearrの中の非ゼロ値の2次元配列反復
        のint COUNT = 0; // 最初のいくつかの非ゼロデータを記録する
        ためのINT I = 0;私は< 。11; I ++ ){
             ためINT J = 0; J <11; J ++ ){
                 IF!(chessarr1 [I] [J] = 0 ){
                    カウント ++ ;
                    sparsearr [回数] [ 0] = I;
                    sparsearr [回数] [ 1] = J;
                    sparsearr [回数] [ 2] = chessarr1 [I] [J]。
                }
            }
            }
        // 出力は、疎なアレイを形成
        するSystem.out.printlnを();
        System.out.printlnは( "アレイ希薄である" ;)
         のためにint型 I = 0;私は<sparsearr.length; I ++は){
            System.out.printf( "%D \ T%D \ T%D \ T \ n"は、sparsearr [I] [0]、sparsearr [I] [1]、sparsearr [I] [2 ])。
        }
        System.out.println();


        // 二次元アレイに疎な配列
        INT chessarr2 [] [] = 新しい新しい INT [sparsearr [0] [0] [sparsearr [0] [1 ]];
         //は疎なアレイから2番目の行を横断
        するためにINT I = 1; I <sparsearr.length; I ++ ){
            chessarr2 [sparsearr [I] [ 0] [sparsearr [I] [1] = sparsearr [I] [2 ]。
        }
         // 回復後の疎なアレイである
      ためINT []行:chessarr2){
             ためのint型データ:行){
                System.out.printf( "%d個の\ tの" 、データ);
            }
            System.out.println();
        }
        }
    }

 

おすすめ

転載: www.cnblogs.com/GEMyd/p/11647267.html