資料結構與演算法:稀疏陣列(一)
資料結構與演算法(一)
稀疏陣列
原始二維陣列佔用空間為42
使用稀疏陣列來儲存使用空間為27
(value值代表陣列中不為0的元素個數)
五子棋棋盤儲存示例(結構優化)
程式碼演示:
public class test {
public static void main(String[] args) {
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
System.out.println("原始二維陣列");
for (int[] row : chessArr1){
// System.out.println("%d\t");
for (int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
int sum = 0;
for(int i = 0 ; i < 11 ; i++){
for (int j = 0 ; j < 11 ; j++){
if(chessArr1[i][j] != 0){
sum++;
}
}
}
//建立稀疏矩陣
int sparseArr[][] = new int[sum + 1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
int count = 0;
for(int i = 0 ; i < 11 ; i++){
for (int j = 0 ; j < 11 ; j++){
if(chessArr1[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
System.out.println();
System.out.println("輸出稀疏陣列為——————");
for(int i = 0 ; i < sparseArr.length ; i ++){
System.out.printf("%d\t%d\t%d\t\n" , sparseArr[i][0] , sparseArr[i][1] , sparseArr[i][2]);
}
//輸出恢復後的二位陣列
//1.先讀取稀疏陣列的第一行,根據第一行的資料,建立原始的二維陣列
int chessArr2[][] = new int[sparseArr[0][0]] [sparseArr[0][1]];
//2.再讀取稀疏陣列後的幾行的資料(從第二行開始),並賦給原始的二維陣列即可
for (int i = 1 ; i < sparseArr.length ; i ++){
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
System.out.println();
System.out.println("恢復後的二維陣列");
for(int[] row : chessArr2){
for (int data : row){
System.out.printf("%d\t" , data);
}
System.out.println();
}
}
}
輸出結果:
原始二維陣列
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
輸出稀疏陣列為——————
11 11 2
1 2 1
2 3 2
恢復後的二維陣列
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
[學習視訊來自](https://www.bilibili.com/video/BV1E4411H73v?p=12)
相關文章
- 【資料結構與演算法】——稀疏陣列資料結構演算法陣列
- 資料結構與演算法之稀疏陣列資料結構演算法陣列
- 資料結構與演算法—稀疏陣列和佇列資料結構演算法陣列佇列
- (一)Java資料結構之稀疏陣列Java資料結構陣列
- 資料結構(一)-稀疏矩陣資料結構矩陣
- 資料結構與演算法——陣列資料結構演算法陣列
- 資料結構與演算法 | 陣列(Array)資料結構演算法陣列
- 資料結構與演算法學習-陣列資料結構演算法陣列
- TypeScript演算法與資料結構-陣列篇TypeScript演算法資料結構陣列
- 資料結構與演算法系列(一)陣列實現資料結構演算法陣列
- js資料結構與演算法 陣列、棧部分JS資料結構演算法陣列
- 資料結構與演算法整理總結---陣列,連結串列資料結構演算法陣列
- JS資料結構(一)——陣列JS資料結構陣列
- 【資料結構與演算法】字串匹配(字尾陣列)資料結構演算法字串匹配陣列
- 資料結構-陣列資料結構陣列
- 資料結構 - 陣列資料結構陣列
- 資料結構與演算法知識點總結(1)陣列與連結串列資料結構演算法陣列
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- 《JavaScript資料結構與演算法》筆記——第2章 陣列JavaScript資料結構演算法筆記陣列
- 資料結構與演算法基礎之指標和陣列資料結構演算法指標陣列
- 資料結構與演算法-佇列資料結構演算法佇列
- 資料結構之「陣列」資料結構陣列
- 資料結構之陣列資料結構陣列
- 資料結構2——陣列資料結構陣列
- 稀疏陣列陣列
- 演算法與資料結構1800題 之 陣列與線性表(三)演算法資料結構陣列
- JavaScript 的資料結構和演算法 - 陣列篇JavaScript資料結構演算法陣列
- 資料結構與演算法-棧與佇列資料結構演算法佇列
- 看圖輕鬆理解資料結構與演算法系列(陣列)資料結構演算法陣列
- 陣列(Array)- 極客時間(資料結構與演算法之美)陣列資料結構演算法
- C#資料結構與演算法3-C# 串和陣列C#資料結構演算法陣列
- 前端學習 資料結構與演算法 快速入門 系列 —— 陣列前端資料結構演算法陣列
- 稀疏陣列、佇列陣列佇列
- javascript資料結構與演算法-佇列JavaScript資料結構演算法佇列
- 資料結構與演算法分析——佇列資料結構演算法佇列
- Java版-資料結構-陣列Java資料結構陣列
- LeetCode之資料結構——陣列LeetCode資料結構陣列
- JavaScript資料結構01 - 陣列JavaScript資料結構陣列