稀疏矩阵压缩

对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。
人们无法给出稀疏矩阵的确切定义,一般都只是凭个人的直觉来理解这个概念,即矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素没有分布规律。

由于稀疏矩阵中非零元素较少,零元素较多,因此可以采用只存储非零元素的方法来进行压缩存储。
  由于非零元素分布没有任何规律,所以在进行压缩 存储的时侯需要存储非零元素值的同时还要存储非零元素在矩阵中的位置,即非零元素所在的行号和列号,也就是在存储某个元素比如aij的值的同时,还需要存 储该元素所在的行号i和它的列号j,这样就构成了一个三元组(i,j,aij)的线性表。

package example;

public class Test{
    public static void main(String[] args) {
        int rows=6;
        int cols=6;
        int n=8;
        int[][] A={{25,0,0,32,0,-25},
                {0,33,77,0,0,0},
                {0,0,0,55,0,0},
                {0,0,0,0,0,0},
                {101,0,0,0,0,0},
                {0,0,38,0,0,0}
                };
        int[][] B=new int[n+1][3];
        B[0][0]=rows;                       //表示此矩阵的行数
        B[0][1]=cols;                        //表示此矩阵的列数
        B[0][2]=n;                            //表是非零的数目
        yasuo(A,B,rows,cols);
         for(int i=0;i<n+1;i++)
         {
             for(int j=0;j<3;j++)
               System.out.print(B[i][j]+"\t");
             System.out.println();
         }
    
}

    private static void yasuo(int[][] A, int[][] B, int rows, int cols) {
        int k=1;
        for(int i=0;i<rows;i++){
            for(int j=0;j<cols;j++)
            {
                if(A[i][j]!=0)
                {
                    B[k][0]=i+1;
                    B[k][1]=j+1;
                    B[k][2]=A[i][j];
                    k++;
                }
            }
        }
    }
}
/*
6    6    8    
1    1    25    
1    4    32    
1    6    -25    
2    2    33    
2    3    77    
3    4    55    
5    1    101    
6    3    38    
*/

 

posted @ 2016-02-27 12:10  zerocoin  阅读(1109)  评论(0编辑  收藏  举报