稀疏数组
稀疏数组
什么是稀疏数组
如果在一个数组中,大部分元素的值均为0(或同一值)时,传统的二维数组存储方式,会利用大量的存储空间来存放0值,从而浪费大量内存。比如说医学图像中的背景,或者一些数据转化后的特征等都会出现这种问题。
为了解决这个问题引入了稀疏数组的概念,它是通过一个三元组的方式将非0数据保存到一个数组中,该数组即是稀疏数组。
代码实现
package Scanner;
public class Demo4 {
public static void main(String[] args) {
//生成原始数组
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
System.out.println("输出原始数组");
for(int[] arr : array){
for(int val : arr){
System.out.print(val + "\t");
}
System.out.println();
}
//统计原始数组中非0值的个数
int sum = 0;
for(int i = 0; i < array.length; i++){
for(int j = 0; j < array[0].length; j++){
if(array[i][j] != 0)
sum++;
}
}
System.out.println("非零值的个数:" + sum);
//创建一个稀疏数组的数组, 稀疏数组的第一行为原始数组的行数,列数,非零值个数
int [][] SparseArray = new int[sum+1][3];
SparseArray[0][0] = array.length;
SparseArray[0][1] = array[0].length;
SparseArray[0][2] = sum;
//将非零值的信息放到稀疏数组中
//每一行存放非零值的行数,列数,值
int cnt = 0;
for(int i = 0; i < array.length; i++){
for(int j = 0; j < array[i].length; j++){
if(array[i][j] != 0){
cnt++;
SparseArray[cnt][0] = i;
SparseArray[cnt][1] = j;
SparseArray[cnt][2] = array[i][j];
}
}
}
System.out.println("输出稀疏数组");
for(int i = 0; i < SparseArray.length; i++){
for(int j = 0; j < SparseArray[i].length; j++){
System.out.print(SparseArray[i][j] + "\t");
}
System.out.println();
}
//还原数组
int[][] RestoreArray = new int[SparseArray[0][0]][SparseArray[0][1]];
for(int i = 1; i < SparseArray.length; i++){
RestoreArray[SparseArray[i][0]][SparseArray[i][1]] = SparseArray[i][2];
}
System.out.println("输出还原后的数组");
for(int[] arr : RestoreArray){
for(int val : arr){
System.out.print(val + "\t");
}
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
非零值的个数:2
输出稀疏数组
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
Process finished with exit code 0