稀疏矩阵
作者:互联网
假如矩阵只有很少的值是有效的,其余值均为0或均相同,按以下普通矩阵的方法存储无疑浪费了很多空间,我们可以采用稀疏矩阵的方法存储。
稀疏矩阵第一行三个值分别存的是普通矩阵的行数,列数,和有效值个数。
稀疏矩阵除第一行外每行的三个值分别是有效值所在的行、列和有效值。
public class SparseMatrixTest {
public static void main(String[] args) {
// 普通矩阵
int[][] arrays1 = new int[10][10];
arrays1[1][2] = 1;
arrays1[3][5] = 2;
//打印普通矩阵
printArray(arrays1);
//原始矩阵 ——> 稀疏矩阵
//求有效值个数
int len = 0;
for (int[] array : arrays1) {
for (int i : array) {
if (i != 0) {
len++;
}
}
}
//声明稀疏矩阵。
int[][] arrays2 = new int[len+1][3];
/*
arrays2[0][0]是矩阵的行
arrays2[0][1]是矩阵的列
arrays2[0][2]是矩阵有效值个数
*/
arrays2[0][0] = arrays1.length;
arrays2[0][1] = arrays1[0].length;
arrays2[0][2] = len;
//给稀疏矩阵赋值。
int count = 0;
for (int i = 0; i < arrays1.length; i++) {
for (int j = 0; j < arrays1[i].length; j++) {
if (arrays1[i][j] != 0) {
count++;
//有效值所在行
arrays2[count][0] = i;
//有效值所在列
arrays2[count][1] = j;
//有效值
arrays2[count][2] = arrays1[i][j];
}
}
}
//打印数组
printArray(arrays2);
//稀疏矩阵 --> 原始矩阵
int[][] arrays3 = new int[arrays2[0][0]][arrays2[0][1]];
for (int i = 1; i < arrays2.length; i++) {
arrays3[arrays2[i][0]][arrays2[i][1]] = arrays2[i][2];
}
//打印数组
printArray(arrays3);
}
public static void printArray(int[][] arrays){
for (int[] array : arrays) {
for (int i : array) {
System.out.print(i + "\t");
}
System.out.println();
}
}
}
标签:有效值,int,矩阵,稀疏,arrays1,arrays2 来源: https://www.cnblogs.com/hzyuan/p/15754569.html