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 倫理について何を学ぶことができるか?

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

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

安全性は小さな問題ではありません。これがAI時代に彼らが選択することです

AI時代においては、セキュリティを早急に再定義する必要があります。人工知能やモノのインターネットなど...

...

「Google版SORA」はぼやけたグラフィックで嘲笑されたが、世界シミュレーターとして新たな一歩を踏み出した。

インタラクティブな仮想世界を作成するために使用される、Google の 110 億のパラメータ Ge...

機械知能のための TensorFlow 実践: 製品環境へのモデルの導入

TesnsorFlow を使用して、基本的な機械学習モデルから複雑なディープラーニング ネットワーク...

自分だけのデジタルヒューマンを開発しよう、FACEGOODが音声駆動表現技術をオープンソース化

現在、メタバースのトレンドの下、AIデジタルヒューマンもエンターテインメント、サービス、教育、マーケ...

建設業界におけるドローン

建設業界へのドローンの導入は、高度な建設手順を合理化することで業界に大きな変化をもたらしました。建設...

TensorFlow から Theano まで: 7 つのディープラーニング フレームワークの水平比較

ディープラーニング プロジェクトを開始する前に、適切なフレームワークを選択することが非常に重要です。...

...

Cloudera Greater Chinaのテクニカルディレクター、Liu Lifang氏:より正確なAIにはより正確なデータが必要

アプリケーションの可観測性と AI の信頼、リスク、セキュリティ管理は、ガートナーが 2023 年に...

iPhoneで初めての機械学習モデルを構築する方法

導入データサイエンティストとして、私は常に、トップテクノロジー企業が私と関係のある分野で新製品を発売...

AI教育の知能化、パーソナライゼーション、多様化は今後さらに発展するだろう

人工知能教育は主に、ユーザーの学習行動データを分析・処理することで、パーソナライズされた学習コンテン...

機械学習インフラストラクチャを Python ではなく Go で記述する理由は何ですか?

[[314943]] Python が機械学習プロジェクトで人気のある言語であることは間違いありま...

...

2022 年の AI 開発とイノベーションのトップ 10 トレンド

イノベーションは終わりがなく、人工知能(AI) などのテクノロジーが静かに世界を変えています。人工知...