Java プログラミング スキル - データ構造とアルゴリズム「スパース配列」

Java プログラミング スキル - データ構造とアルゴリズム「スパース配列」

[[385874]]

基本的な紹介

配列内のほとんどの要素が 0 であるか、同じ値を持つ配列である場合、スパース配列を使用して配列を保存できます。

スパース配列の処理方法は次のとおりです。

  1. 配列の行と列の数、および配列に含まれる異なる値の数を記録します。
  2. プログラムのサイズを縮小するために、異なる値を持つ要素の行と列を小さな配列に記録します。

元の2次元配列


元の2次元配列

変換された2次元配列

最初の行は、元の配列の行と列の数、および値の数を記録します(8<<は元の配列の値の数を表します22、15、11、17、-6、39、91、28>>)


変換された2次元配列

2次元配列を疎配列に変換するためのアイデア

  1. 元の2次元配列を走査し、有効なデータの数の合計を取得します。
  2. 合計に応じて、疎配列sparseArr int(sum+1)(3)を作成できます。
  3. 2次元配列の有効なデータをスパース配列に格納する

疎な配列を元の2次元配列に変換するためのアイデア

  1. まず、スパース配列の最初の行を読み取り、最初の行のデータに基づいて元の2次元配列を作成します。
  2. 次に、スパース配列の最後の数行のデータを読み取り、元の 2 次元配列に割り当てます。

アプリケーション例

  1. 上記と同様の 2 次元配列 (chessboard\map) を保持するには、スパース配列を使用します。
  2. 疎配列をディスクに保存し、元の2次元配列を復元します。

コード例

  1. パッケージ com.structures.sparsearray;
  2.  
  3. パブリッククラスSparseArray {
  4.  
  5. 公共 静的void main(String[] args) {
  6. // オリジナルの2次元配列11*11を作成する
  7. //0: チェスの駒がないことを示す、1 は黒いチェスの駒を示す、2 は白いチェスの駒を示す
  8. int [][] chessArr1 = 新しいint [11][11];
  9. チェスArr1[1][2] = 1;
  10. チェスArr1[2][3] = 2;
  11. // 元の2次元配列を出力する
  12. System.out.println ( "元2次元配列" );
  13. ( int [] ints : chessArr1)の場合{
  14. ( int anInt : ints)の場合{
  15. System.out.printf ( "%d\t" 、 anInt) ;
  16. }
  17. System.out.println( ) ;
  18. }
  19. //2次元配列をスパース配列に変換する
  20. //1. まず 2 次元配列を走査して、ゼロ以外のデータの数を取得します。
  21. 整数 合計= 0;
  22. ( int [] ints : chessArr1)の場合{
  23. ( int anInt : ints)の場合{
  24. (整数が0の場合){
  25. 合計++;
  26. }
  27. }
  28. }
  29. システム.out.println ( "sum = " + sum );
  30. //2. 対応するスパース配列を作成する
  31. int [][] sparseArr = 新しいint [合計+ 1][3];
  32. // 疎配列に値を割り当てる
  33. スパースArr[0][0] = 11;
  34. スパースArr[0][1] = 11;
  35. sparseArr[0][2] =合計;
  36. //元の配列を走査し、スパース配列にゼロ以外の値を格納する
  37. 整数  count = 0; // countはゼロ以外のデータの数を記録するために使用されます
  38. ( int i = 0; i < chessArr1.length; i++) {
  39. ( int j = 0 ; j < chessArr1[i].length; j++) {
  40. チェスArr1[i][j] != 0 の場合 {
  41. カウント++;
  42. sparseArr[カウント][0] = i;
  43. sparseArr[カウント][1] = j;
  44. sparseArr[カウント][2] = chessArr1[i][j];
  45. }
  46. }
  47. }
  48. // 疎な配列を出力する
  49. System.out.println( ) ;
  50. System.out.println ( "得られたスパース配列は~~~~です" );
  51. ( int [] ints : sparseArr )の場合{
  52. ( int anInt : ints)の場合{
  53. (整数が0の場合){
  54. System.out.printf ( "%d\t" 、 anInt) ;
  55. }
  56. }
  57. System.out.println( ) ;
  58. }
  59.  
  60. //スパース配列を元の配列に復元する
  61. int [][] chessArr2 = 新しいint [sparseArr[0][0]][sparseArr[0][1]];
  62. ( int i = 0; i < sparseArr[0][2]; i++) {
  63. チェスArr2[sparseArr[i + 1][0]][sparseArr[i + 1][1]] = sparseArr[i + 1][2];
  64. }
  65. //復元後の元の配列
  66. System.out.println ( "復元後の元の配列" );
  67. ( int [] ints : chessArr2)の場合{
  68. ( int anInt : ints)の場合{
  69. System.out.printf ( "%d\t" 、 anInt) ;
  70. }
  71. System.out.println( ) ;
  72. }
  73. }
  74. }
  75. /*
  76. 元の2次元配列
  77. 0 0 0 0 0 0 0 0 0 0 0
  78. 0 0 1 0 0 0 0 0 0 0 0
  79. 0 0 0 2 0 0 0 0 0 0 0
  80. 0 0 0 0 0 0 0 0 0 0 0
  81. 0 0 0 0 0 0 0 0 0 0 0
  82. 0 0 0 0 0 0 0 0 0 0 0
  83. 0 0 0 0 0 0 0 0 0 0 0
  84. 0 0 0 0 0 0 0 0 0 0 0
  85. 0 0 0 0 0 0 0 0 0 0 0
  86. 0 0 0 0 0 0 0 0 0 0 0
  87. 0 0 0 0 0 0 0 0 0 0 0
  88. 合計= 2
  89.  
  90. 結果として得られるスパース配列は~~~~
  91. 11 11 2
  92. 1 2 1
  93. 2 3 2
  94. 修復後の元の配列
  95. 0 0 0 0 0 0 0 0 0 0 0
  96. 0 0 1 0 0 0 0 0 0 0 0
  97. 0 0 0 2 0 0 0 0 0 0 0
  98. 0 0 0 0 0 0 0 0 0 0 0
  99. 0 0 0 0 0 0 0 0 0 0 0
  100. 0 0 0 0 0 0 0 0 0 0 0
  101. 0 0 0 0 0 0 0 0 0 0 0
  102. 0 0 0 0 0 0 0 0 0 0 0
  103. 0 0 0 0 0 0 0 0 0 0 0
  104. 0 0 0 0 0 0 0 0 0 0 0
  105. 0 0 0 0 0 0 0 0 0 0 0
  106. */

【編集者のおすすめ】

  1. いいですね、上司からシンプルなワークフロー エンジンを開発するように言われました...
  2. Windows 10 は世界を揺るがす変化をもたらします!今年最初のアップデートが来ました
  3. 2021年に注目すべき6つのサイバーセキュリティトレンド
  4. 近年の Windows 10 最大の改善点! Windows 10 21H2 の新機能を一足先にご紹介
  5. Xiao Aiは本当にPC版をリリースしたのか?コンピュータ版のXiao Aiを体験してみましょう

<<:  ロボットは電気羊の夢を見るか?Google AI 従業員の辞職から AI 倫理について何を学ぶことができるか?

>>:  アメリカの医師は新型コロナウイルスと戦うために人工知能をどのように活用しているのか

ブログ    

推薦する

このアルゴリズムは顔認識の「マスク」問題を解決し、2日間で1,000人のコミュニティで97%の精度を達成しました | AIが疫病と戦う

ますます成熟する人工知能は、新型コロナウイルス感染症対策の最前線で「逆転者」と呼ばれる特別な集団とな...

AI投資は2025年までに2,320億ドルに達する

KPMGが最近発表したレポートによると、2025年までに人工知能(AI)、機械学習、ロボティック・プ...

...

メタバースを強化してインテリジェントなインタラクションの新たな未来を切り開く

4月23日、51CTO主催の「MetaConメタバーステクノロジーカンファレンス2022」がオンライ...

...

AI 対応スマート ビルディングの利点は何ですか?

世界が人工知能(AI)を採用し続けるにつれて、AIを使用したスマートビルディングの人気が高まっていま...

...

AIGC: 将来は誰が支払うのでしょうか?

情報獲得に対する私たちの執着は、初期の人類が生き残り、繁殖するための適応特性を発達させたことにまで遡...

デューク大学は、低品質のモザイクを数秒で高解像度の画像に変換するAIアルゴリズムを提案

高画質を追求する時代において、低画質に対する許容度はますます低くなっています。 Zhihuで「低解像...

早く見て! 2022年の建設業界の7つの大きな発展トレンド!

建設業界の市場競争はますます激しくなっています。建設会社は生き残りと発展のために大きなプレッシャーに...

...

AIの次の大きな課題:言語のニュアンスを理解すること

それは非常に奥深く、微妙なことです。同じ文でも、文脈によって意味が変わることがよくあります。人間でさ...

...

ガートナーの予測: 2019 年の 7 つの主要な AI テクノロジーのトレンドが数百万の業界に混乱をもたらす!

SFではAIロボットは悪者として描かれるかもしれないが、一部のテクノロジー大手は現在、AIロボット...