1、稀疏矩阵的定义:
如果一个二维数组中有很多无效的数据,那么这些无效的数据就会导致大量的磁盘空间浪费,这个时候我们就可以考虑使用稀疏矩阵来存放有效数据,将原数组压缩成一个行数为有效数据之和加一,列数为三的二维数据 ,==其中这个二维数据的第一列表示有效数据在原数组中存放的行号,第二列表示有效数据在原数组中存放的列号,第三列表示有效数据的值,并且这个二维数组的第一行分别为:原数组的行数,原数组的列数,有效数据的个数。==
用Java实现如下所示(假如矩阵如下所示):
public class Test {
public static void main(String[] args) {
//创建二维数组
int[][] array = new int[11][11];
//给二维数组赋值
array[1][2] = 1;
array[2][4] = 2;
//遍历原始数组
System.out.println("原始数组如下所示:");
showArray(array);
System.out.println("-----------------------------------------");
//压缩至稀疏数组
//统计原数组中的有效数据
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array[i][j] != 0) {
sum++;
}
}
}
//定义一个稀疏数组
int[][] sparseArray = new int[sum + 1][3]; //行数为有效数据和+1
//初始化稀疏矩阵的第一行
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
//指向稀疏数组中行的指针
int count = 0;
//遍历数组,并且将有效数据放入稀疏矩阵中
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array[i][j] != 0) {
//指针往后移一位
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = array[i][j];
}
}
}
System.out.println("稀疏矩阵如下所示:");
showArray(sparseArray);
System.out.println("-----------------------------------------");
//将稀疏数组转换为原数组
//获取原数组的大小
int row = sparseArray[0][0];
int col = sparseArray[0][1];
//创建原二维数组
int[][] oldArray = new int[row][col];
//将有效数据放入原数组中
for (int i = 1; i <= sum; i++) {
int num1 = sparseArray[i][0]; //要在原数组中存放的行号
int num2 = sparseArray[i][1]; //要在原数组中存放的列号
//将有效数据存放在原数组中
oldArray[num1][num2] = sparseArray[i][2];
}
System.out.println("通过稀疏矩阵还原原矩阵如下所示:");
showArray(oldArray);
}
//遍历数组的方法
public static void showArray(int[][] array) {
//行数
int row = array.length;
//列数
int col = array[0].length;
//循环遍历
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.print(array[i][j] + "\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 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
-----------------------------------------
稀疏矩阵如下所示:
11 11 2
1 2 1
2 4 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 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,sparseArray,int,矩阵,稀疏,数组
From: https://blog.51cto.com/u_15433911/7479956