稀疏矩阵:
将一个庞大的、具有大量重复值的矩阵简化为不含重复值的稀疏矩阵
目的:减少存储空间的占用,简化矩阵形式
方法:稀疏矩阵的大概模式:
每一行的参数意义:row(行) | col(列) | count
稀疏矩阵只有三列,分别代表行数,列数,值;
共有n+1行,对应原数组有效值的个数+1;
除第一行外,每一行对应一个有效值的行、列、值的信息,
稀疏矩阵的第一行对应原矩阵的行数,列数,有效值个数
稀疏矩阵的实现代码:
package primDataStructure;
public class sparseMatrix {
public static void main(String args[]) {
int [][]preMatrix=new int[10][8];
preMatrix[3][4]=1;
preMatrix[7][2]=6;
preMatrix[3][5]=9;
int cacu=0;
//计算矩阵的有效值
for(int k[]:preMatrix) {
for(int m:k) {
if(m!=0) {
cacu++;
}
}
}
//建立稀疏矩阵,行为有效值+1,列为3
int[][]sparseM=new int[cacu+1][3];
//为稀疏矩阵插入有效值的行列信息和值
int i=0,j=0,count=0;
for(int []k:preMatrix) {
j=0;
for(int m:k) {
if(m!=0) {
sparseM[count+1][0]=i;
sparseM[count+1][1]=j;
sparseM[count+1][2]=m;
count++;
}
j++;
}
i++;
}
//为稀疏矩阵的头部赋值(原矩阵的行列信息和有效值个数)
sparseM[0][0]=i;
sparseM[0][1]=j;
sparseM[0][2]=cacu;
//遍历原矩阵
for(int x=0;x<10;x++) {
for(int y=0;y<8;y++) {
System.out.print(preMatrix[x][y]+" ");
}
System.out.println();
}
//遍历稀疏矩阵
for(int x=0;x<cacu+1;x++) {
for(int y=0;y<3;y++) {
System.out.print(sparseM[x][y]+" ");
}
System.out.println();
}
//还原矩阵
int reMatrix[][]=new int[sparseM[0][0]][sparseM[0][1]];
for(int x=0;x<sparseM[0][2];x++) {
reMatrix[sparseM[x+1][0]][sparseM[x+1][1]]=sparseM[x+1][2];
}
for(int x=0;x<sparseM[0][0];x++) {
for(int y=0;y<sparseM[0][1];y++) {
System.out.print(reMatrix[x][y]+" ");
}
System.out.println();
}
}
}