什么是稀疏矩阵?
矩阵中,若数值为 0 的元素数目远远多于非 0 元素的数目,并且非 0 元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非 0 元素数目占大多数时,则称该矩阵为稠密矩阵。 这种稀疏矩阵保存有价值的数据较少,所以可以进行压缩,建议一个新的数组,记录每个非0的坐标和值,比如一个n维数组可以建议一个(n+1)维数组来记录值,这样可以大大减少保存成本,但需要注意的是,当元素个数超过1/(n+1)的时候,这种存储算法会超过其原来的成本。
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
/*
* 稀疏矩阵算法
* */
public class InfoTest {
public static void main(String[] args) throws IOException {
int[][] arraydata =new int[11][11];
arraydata[1][1]=1;
arraydata[2][3]=7;
arraydata[4][7]=13;
int sum=0;
for(int row[]:arraydata){
for(int dt:row){
System.out.printf("%d\t",dt);
if(dt>0){
sum++;
}
}
System.out.println();
}
int[][] record=new int[sum+1][3];
record[0][0]=arraydata.length;
record[0][1]=arraydata.length;
record[0][2]=sum;
int count=0;
for(int i=0;i<arraydata.length;i++){
for(int j=0;j<arraydata.length;j++){
if(arraydata[i][j]>0){
count++;
record[count][0]=i;
record[count][1]=j;
record[count][2]=arraydata[i][j];
}
}
}
int[][] data_list =new int[11][11];
for(int i=1;i<=record.length-1;i++){
int j=record[i][0];
int k=record[i][1];
data_list[j][k]=record[i][2];
}
System.out.println("**********");
for(int row[]:data_list){
for(int dt:row){
System.out.printf("%d\t",dt);
if(dt>0){
sum++;
}
}
System.out.println();
}
}
}