Java資料結構---稀疏陣列
阿新 • • 發佈:2021-11-25
稀疏數值的基礎概念(圖示)
◆當一個數組中大部分元素為0,或者為同一值的陣列時,可以使用稀疏陣列來儲存該陣列。
◆稀疏陣列的處理方式是:
◆記錄陣列一共有幾行幾列,有多少個不同值
◆把具有不同值的元素和行列及值記錄在-個小規模的陣列中,從而縮小程式的規模
◆如上圖:上邊是原始陣列,下邊是稀疏陣列
public static void main(String[] args){ //建立一個原始二維陣列 int[][] array1 = new int[11][11]; array1[1][2] = 1; array1[2][3] = 5; array1[3][4] = 9; for(int i=0;i<array1.length-1;i++){ for(int j=0;j<array1.length-1;j++){ System.out.print(array1[i][j]+"\t"); } System.out.println(); } System.out.println("======================================" + "====================================");//判斷有多少個有效數值 int sum = 0; for(int i=0;i<array1.length-1;i++){ for(int j=0;j<array1.length-1;j++){ if(array1[i][j]!=0){ sum++; } } } System.out.println("有效數值有"+sum+"個"); //建立一個稀疏陣列int[][] array2 = new int[sum+1][3]; array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = sum; //count記數 int count = 0; for(int i=0;i<array1.length;i++){ for(int j=0;j<array1[i].length;j++){ if(array1[i][j]!=0){ count++; //array2[count][0] 橫座標 = i //array2[count][1] 縱座標 = j //array2[count][2] 值 = array1[i][j] array2[count][0] = i; array2[count][1] = j; array2[count][2] = array1[i][j]; } } } for(int x[]:array2){ for(int intX:x){ System.out.print(intX+"\t"); } System.out.println(); } System.out.println("======================================" + "===================================="); //還原稀疏陣列 //建立一個二維陣列 int[][] array3 = new int[array2[0][0]][array2[0][1]]; for(int i=1;i<array2.length;i++){ //array3[array2的橫座標][array2的縱座標] = array2[i][2] array3[array2[i][0]][array2[i][1]] = array2[i][2]; } for(int x[]:array3){ for(int intX:x){ System.out.print(intX+"\t"); } System.out.println(); } }