稀疏矩阵压缩

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

稀疏矩阵压缩的相关文章

稀疏矩阵-压缩存储-列转置法- 一次定位快速转置法

稀疏矩阵的压缩存储 压缩存储值存储极少数的有效数据.使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放. 压缩存储:行优先一行一行扫 有效数据存入以为矩阵_arr 列转置法 : 从前向后遍历压缩矩阵,先找列号为0的存入 转置矩阵的压缩矩阵.然后从前向后找列号为1的 ...直到转置矩阵的压缩矩阵大小和 原矩阵的一样大 这时就找完了 时间复杂度为    O(原矩阵列数 * 压缩矩阵长度) 一次定位快速转置法: 设置两个辅助矩阵 RowCou

稀疏矩阵压缩存储:CSR

Compressed Sparse Row,CSR格式的列下标向量和数据值向量与COO格式(三元组)类似,在行下标表示上做了压缩.根据数据的排列规则,只需要指定在哪个数据换到下一行就行. >>> col_idx = np.array([0,3,1,2,3,0,1,3]) >>> values = np.array([4,2,1,5,7,6,3,8]) >>> row_ptr = np.array([0,2,3,5,8]) >>> cs

稀疏矩阵的压缩存储和转置

1.稀疏矩阵:M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律. 2.稀疏矩阵的压缩存储:压缩存储值存储极少数的有效数据. 由于非零元素分布没有任何规律,所以在进行压缩存储的时侯需要存储无效值的同时还要存储有效元素在矩阵中的位置,即有效元素所在的行号和列号,也就是在存储某个元素比如aij的值的同时,还需要存储该元素所在的行号i和它的列号j,这样就构成了一个三元组(i,j,aij)的线性表. 使用{ row, col, value }三元组存储每一个有效数据,三元组按原

稀疏矩阵的转置

稀疏矩阵:M*N的矩阵,矩阵中的有效值的个数远小于无效值的个数,而且这些数分布没有规律. 压缩存储的值极少,采用三元组(value,row,col)存储每一个有效值.三元组按照在原矩阵的位置,按照行优先存储. 构造函数: SparseMatrix(T* a,size_t m,size_t n,const T& invalid) :_rowsize(m) ,_colsize(n) ,_invalid(invalid) { for(size_t i=0;i<m;i++) { for(size_t

OLAP了解与OLAP引擎——Mondrian入门(一)

一.  OLAP的基本概念 OLAP(On-Line Analysis Processing)在线分析处理是一种共享多维信息的快速分析技术:OLAP利用多维数据库技术使用户从不同角度观察数据:OLAP用于支持复杂的分析操作,侧重于对管理人员的决策支持,可以满足分析人员快速.灵活地进行大数据复量的复杂查询的要求,并且以一种直观.易懂的形式呈现查询结果,辅助决策. 二.  OLAP的基本内容 (1)变量(度量) 变量是数据度量的指标,是数据的实际意义,即描述数据"是什么".像示例中的人数.

2014年腾讯实习生笔试题解析

本答案是我自己搜索资料解答出来,假设不正确敬请指出 1. 使用深度优先算法遍历下图.遍历的顺序为(C) A ABCDEFG B ABDCFEG C ABDECFG D ABCDFEG 解析: 深度优先遍历相似于树的前序遍历,其基本思想为: (1).訪问顶点v; (2).从v的未被訪问的邻接点中选取一个顶点w,从w出发进行深度优先遍历. (3).反复以上两步: 选C 2. 输入序列ABCABC经过栈操作变成ABCCBA,以下哪些是可能的栈操作( AD) A. push pop push pop p

腾讯实习生笔试准备

http://www.tuicool.com/articles/F7Bzeq 深度优先与广度优先遍历 栈操作 关键码序列与堆 稀疏矩阵压缩的存储方法 5.已知二叉树的后序,中序排列,求先序排列再线索化的问题: http://m.blog.csdn.net/blog/z421745963/24294465 先序排列:根左右.中序排列:左根右.后序排列:左右根. 前序线索二叉树:前驱和后继的理解. 6.常用的线性结构:线性表,栈,队列,双队列,数组,串.常见的非线性结构有:二维数组,多维数组,广义表

用户參与记录存储的演变

有这样一个应用场景:用户有两个连续的操作A和操作B,必须是操作A完毕后才干运行操作B,假设操作A没有完毕就触发了操作B,则显示用户须要先运行操作A,即在操作B运行须要查询操作A是否运行过.这里引申出来的问题是,记录用户參与记录,提供针对用户和操作的查询方法.当不同的数据量时,我们的存储方案会大不同样,随着数据的增长,方案不断演变. 1.数据量较小,用户操作行为固定: 存储:MySQL 方案:我们以UID为key,一行一个用户,每一个用户包含的用户作为列存储,比方UID=100,固定存储为操作A和

《数据挖掘概念与技术》——第四章 数据仓库与联机分析处理

一.基本概念 1.宽泛概念:数据仓库是一种数据库,它与的那位的操作数据库分别维护.数据仓库系统允许将各种应用系统集成在一起,为同一的历史数据分析提供坚实的平台,对信息处理提供支持. 另一种说法: 数据仓库是一个面向主题的.集成的.时变的.非易失的数据集合,支持管理者的决策过程. 1)面向主题的:数据仓库围绕一些重要的主题,如顾客.供应商.产品和销售组织.关注点是决策者的数据建模与分析,不是在日常操作和事务处理上. 2)集成的:构造数据仓库是将多个易购数据源,如关系数据库.一般文件.联机事务处理记