稀疏矩陣:
將一個龐大的、具有大量重複值的矩陣簡化爲不含重複值的稀疏矩陣
目的:減少存儲空間的佔用,簡化矩陣形式
方法:稀疏矩陣的大概模式:
每一行的參數意義: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();
}
}
}