目錄
- 第一章 稀疏陣列介紹
- 第二章 稀疏陣列實作
專案地址:https://gitee.com/caochenlei/data-structures
第一章 稀疏陣列介紹
當一個二維陣列中大部分元素為0時,可以使用稀疏陣列來保存該陣列的資訊,通過減少原陣列中0的個數,以達到減小原陣列的大小,具體處理方法如下:
- 建立一個全新的二維陣列,第一行存盤原陣列的行數、列數以及非零元素個數,其中,非零元素個數用于確定存盤陣列資料的行數,
- 我們只需要回圈遍歷原陣列,遇到非零元素將其加入到稀疏陣列第二部分的存盤陣列資料區即可,

第二章 稀疏陣列實作
代碼實作:
package com.caochenlei.array;
public class SparseArray {
public static void main(String[] args) {
//創建一個測驗二維陣列
int[][] testArray = createArray();
showArray("創建一個測驗二維陣列", testArray);
//原陣列轉換為稀疏陣列
int[][] sparseArray = toSparseArray(testArray);
showArray("原陣列轉換為稀疏陣列", sparseArray);
//稀疏陣列轉換為原陣列
testArray = toOriginalArray(sparseArray);
showArray("稀疏陣列轉換為原陣列", testArray);
}
/**
* 列印二維陣列的資訊
*
* @param message 提示資訊
* @param array 二維陣列
*/
public static void showArray(String message, int[][] array) {
System.out.println(message + ":");
for (int[] row : array) {
for (int col : row) {
System.out.printf("%d\t", col);
}
System.out.println();
}
System.out.println();
}
/**
* 創建測驗的二維陣列
*
* @return 二維陣列
*/
public static int[][] createArray() {
int testArray[][] = new int[10][10];
testArray[1][1] = 1;
testArray[1][2] = 2;
testArray[2][3] = 3;
return testArray;
}
/**
* 原陣列轉換為稀疏陣列
*
* @param array 原陣列
* @return 稀疏陣列
*/
public static int[][] toSparseArray(int[][] array) {
//獲取原陣列的行數
int rows = array.length;
//獲取原陣列的列數
int cols = array[0].length;
//獲取非零元素個數
int sum = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (array[i][j] != 0) {
sum++;
}
}
}
//創建一個稀疏陣列
int sparseArray[][] = new int[1 + sum][3];
//第一部分資訊賦值
sparseArray[0][0] = rows;
sparseArray[0][1] = cols;
sparseArray[0][2] = sum;
//第二部分資料賦值
int count = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (array[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = array[i][j];
}
}
}
//回傳一個稀疏陣列
return sparseArray;
}
/**
* 稀疏陣列轉換為原陣列
*
* @param sparseArray 稀疏陣列
* @return 原陣列
*/
public static int[][] toOriginalArray(int[][] sparseArray) {
//獲取原陣列的行數
int rows = sparseArray[0][0];
//獲取原陣列的列數
int cols = sparseArray[0][1];
//恢復原陣列的資料
int testArray[][] = new int[rows][cols];
for (int i = 1; i < sparseArray.length; i++) {
int row = sparseArray[i][0];
int col = sparseArray[i][1];
int val = sparseArray[i][2];
testArray[row][col] = val;
}
//回傳一個原陣列
return testArray;
}
}
運行效果:
創建一個測驗二維陣列:
0 0 0 0 0 0 0 0 0 0
0 1 2 0 0 0 0 0 0 0
0 0 0 3 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
原陣列轉換為稀疏陣列:
10 10 3
1 1 1
1 2 2
2 3 3
稀疏陣列轉換為原陣列:
0 0 0 0 0 0 0 0 0 0
0 1 2 0 0 0 0 0 0 0
0 0 0 3 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.uj5u.com/houduan/265112.html
標籤:java
上一篇:Java列舉的使用和原理深度決議,看這一篇博客就夠了
下一篇:怎么把OBS的源串列改成網格模式
