JAVAデータ構造とアルゴリズム - スパース配列

  実際のニーズ 

  •  問題を分析

  二次元アレイの値の多くはデフォルト値の0であるため、記録されたため、無意味なデータ.->疎な配列の多く

 

  1.基本はじめに  

   データ要素の大部分がゼロ、又はアレイを有する値である場合、疎なアレイは、アレイを保持するために使用することができる疎なアレイ処理方法であって

  レコードの1配列、多くの異なる値がどのようにいくつかの奇数行の合計

  2.レコードのランクと値要素には、それによって、プログラムサイズを縮小するために、小さなアレイに異なる値を持ちます

 

スパース配列の説明

  2. アプリケーション例

  1. 前の二次元アレイ(チェッカーボード、地図、等)を保持するために同様のスパースアレイを使用
  2. 疎な配列を保存し、二次元アレイの元の数を再復元することができます
  3. 全体的なアイデア解析

 

 コメントを理解するために、より簡単に多くのことを追加します。3.

公共の静的な無効メイン(文字列[]引数){ 
 2 // 11 * 11の元の2次元配列を作成する
 3 @ 0:なし片1は、黒点バスケットを表す2を表す
 4 INT chessArr1 [] [] = [新しいINT 。。11] [11 ]; 
 。。。5 chessArr1 [1] [2] = 1 ; 
 。。6 chessArr1 [2] [3] = 2 ;  7  。8 //元の2次元アレイを出力する 。(INT 9 []行:chessArr1){  10用(INT データ:行)。11 System.out.printf {( "%D \ T" データ); 12である} 13である)(のSystem.out.println; 14 } 15 16 //アレイ、二次元の疎アレイ17 /二次元アレイのナビゲーションへ/ 1の数は、有効なデータ18がint SUM = 0であり得ること;のために19(INT I = 0; I <11; Iは++ ){20のためのものである(INT J = 0; J <11; J ++ ){ 21 chessArr1 [i]の[(もし J]!= 0)SUM 22は{++で、23である} 24 } 25 } 26であるのSystem.out.println(SUM)、行数に対応する疎アレイ27を作成するために、有効なデータの//数がINT sparseArr [] [] +1 28に等しく =新しいINT [和+1] [3]; //値列は最初の行である疎な配列の割り当てに第3列29の第2の固定値のRMS値// 30 sparseArr [0] [0] = 11; // 動作11 31 sparseArr [0] [1 ] = 11; // 11 32 sparseArr [0] [2として ] =和; // 最初の行と3列3334が有効//の数は、2次元アレイを横断あります(効果的な)非ゼロ値を記憶sparseArrスパースアレイ35 INTカウント= 0;(iは= INT 0; // *のための最初のいくつかの非ゼロデータレコード36に対する I <11; I ++){// 11 行37以下のために(INT J = 0; J <11; J ++ ){38は、IF(!chessArr1 [I] [J] = 0){//値は、二次元アレイが0 39 COUNT ++と等しくないです。40 sparseArr [COUNT] [0] = I; //行41 sparseArr [カウント] [1] = J; // カラム42 sparseArr [カウント] [2] = chessArr1 [I]、[J]; // 第3列の値が43である} 44 } 45 } 46 //入力フォーム疎アレイ47 のSystem.out.println(); 48のSystem.out.println( "疎配列が得られ~~~~~");私は<sparseArr.length; I ++(INT I = 0 49 ){50 //最初の行は、2番目の列は値51 System.out.printfに対する第3の有効な値の対応の列である(「%dの[1] \ T%D \ D%T \ T \ N-」、sparseArr [I] [0]、sparseArr [I]、sparseArr [I] [2 ]); 52れる} // 53は、スパースアレイ54は55であります- - >元の2次元アレイ56 / ** 57 * 1.上記の例に従って、最初のラインのオリジナルデータを作成する2次元配列を読み取るための疎な配列の最初の行、読み出しchessArr2 58 * 2疎に復元データ線の配列と元の2次元アレイの後に割り当てることができる* 59/60 //最初のライン1の最初の行のデータによれば、このような記載chessArr2 61のように、元の2次元配列を作成するための最初の疎な配列を読み取り/ **疎なアレイ構造である62 * 11 11 2 63 * 1 2 1 64 * 2 3 2 65 * / 66 INT chessArr2 [] [] =新しいINT [sparseArr [0] [0] [sparseArr [0] [ 1]]; @ 2行67の//最初の値が第2の値欄第二線からデータ線の疎な配列を読んだ後、元の二次元アレイ68に割り当てられた第2行からの@なぜ?最初の行は、行と69の値があるため(= I INT 1; I <sparseArr.length; I ++ ){70 chessArr2 [sparseArr [I] [0] [。sparseArr [I] [1] = sparseArr [I] [2 ]; 72 。73} // 3つの出力の二次元アレイの回復後74System.out.println(); 75のSystem.out.println( "復元二次元アレイ" ); 76 77(INTのための[]行:chessArr1){78(INT データ:行)79 {のSystem.out .printf( "%D \ T" データ); 80 } 81 のSystem.out.println(); 82 } 84} 83

 
 
chessArr2 [sparseArr [I] [0理解することがより困難に転用 ;]] [sparseArr [I] [1] = sparseArr [I] [2] 
配列arrayループは、単一のアレイsparseArr chessArr2に割り当てされた値を設定します
1 INT行= sparsearr [I] [0 ] 
2 INT COL = sparsearr [I] [I] 
。3 chessarr [行] [COL] = sparsearr [I] [2 ] 
。4 列および行に焦点を当てsparsearr価値の行であること、およびchessarrの列 

4に対応する結果の実装

 

おすすめ

転載: www.cnblogs.com/Jack-GUO/p/12523611.html
おすすめ