參考 《韓順平資料結構和演算法》當乙個陣列(此處針對二維)中大部分元素為0,或者為同乙個值的陣列時,可以採用稀疏陣列來儲存該陣列。
通常定義乙個二維陣列去儲存資料,其中必定會有一些無效資訊(可以認為是0),所以乙個10*10的二維陣列,即使其中只有20個有效資料,如果不進行優化,需要占用100個資料空間;如果使用稀疏陣列去優化,則只需要20*3=60個資料空間。
但如果只是乙個3*3的二維陣列,其中儲存了6個有效資料呢?那我們就要用乙個6*3的稀疏陣列,顯然稀疏陣列不再稀疏。
所以稀疏陣列只適用於大型的二維陣列。
}//記錄其中有效資料的個數
int sum = 0;
for (int i = 0; i < 11; i++) }}
system.out.println("有效資料個數sum="+sum);
//定義乙個稀疏陣列
//陣列行數為,有效資料個數+1,列數為3
int sparsearray = new int[sum+1][3];
sparsearray[0][0] = chessarray.length;
sparsearray[0][1] = chessarray[0].length;
sparsearray[0][2] = sum;
//再次遍歷11*11的陣列,遇到有效資料就填充到稀疏陣列中
//count可以理解為計數器
int count = 0;
for (int i = 0; i < 11; i++) }}
system.out.println("稀疏陣列為:");
for (int row: sparsearray)
system.out.println();
}//從稀疏陣列恢復原先的二維陣列
//讀取稀疏陣列的第一行,定義乙個對應大小的二維陣列
int chessarray_2 = new int[sparsearray[0][0]][sparsearray[0][1]];
//遍歷稀疏陣列的每一行,並填充到新的二維陣列
for (int i = 1; i < sparsearray.length; i++)
//列印新的二維陣列
system.out.println("恢復出的二維陣列:");
for (int row : chessarray_2)
system.out.println();}}
列印輸出為:
資料結構 01 稀疏陣列
將二維陣列 轉 稀疏陣列的思路 1 先遍歷二位陣列 得到非0個數 int sum 0 for int i 0 i chessarr1.length i system.out.println 非0個數 system.out.println sum 建立對應稀疏陣列 int sparsearray ne...
資料結構01 稀疏陣列
二維陣列轉稀疏陣列思路 1 建立乙個二維陣列,遍歷獲取有效資料的個數sum 2 根據sum建立稀疏陣列int sum 1 3 並對於第一行屬性處賦值 3 遍歷二維陣列將有效資料存入稀疏陣列 稀疏陣列轉二維陣列思路 public class 稀疏陣列 根據sum建立稀疏陣列 int sparsearr...
go資料結構01 稀疏陣列
換行 2 建立乙個稀疏陣列,記錄陣列中的元素 思路 遍歷棋盤,如果有乙個元素不為0,那麼建立乙個node結構體,將其放入到棋盤中去 var sparsearr valnode 建立乙個值節點儲存棋盤大小 vnodee valnode sparsearr sparsearr,vnodee for i,...