稀疏矩阵压缩

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稀疏矩阵压缩相关的知识,希望对你有一定的参考价值。

对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(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    
*/

 

以上是关于稀疏矩阵压缩的主要内容,如果未能解决你的问题,请参考以下文章

稀疏矩阵及其压缩格式

稀疏矩阵的压缩存储思想?

多维数组-矩阵的压缩存储- 稀疏矩阵(一)

压缩感知进阶——有关稀疏矩阵

c语言根据以下描述编写一个程序使其能完成对稀疏矩阵的压缩与还原,即给定稀疏矩阵可以压缩存储一个三元组

如何对存储为“压缩稀疏行”的矩阵进行稀疏矩阵索引?