导航:首页 > 文件处理 > 稀疏矩阵的压缩存储方法有两种

稀疏矩阵的压缩存储方法有两种

发布时间:2022-05-19 04:52:49

⑴ 稀疏矩阵常用的压缩存储结构有哪两种

链接存储结构/顺序存储结构

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

为了节省存储空间并且加快处理速度,需要对这类矩阵进行压缩存储,压缩存储的原则是:不重复存储相同元素;不存储零值元素。稀疏矩阵,有三元组表示法、带辅助行向量的二元组表示法(也即行逻辑链表的顺序表),十字链表表示法等。算法基本思想:num[col]:第col列的非零元素个数;cpot[col]:第col列第一个非零元在b.data中的恰当位置;在转置过程中,指示该列下一个非零元在b.data中的位置。

⑶ 如何在工作空间查看稀疏矩阵

稀疏矩阵

设矩阵Amn中有s个非零元素,若s远远小于矩阵元素的总数(即s<<m×n),则称A为稀疏矩阵。

1、稀疏矩阵的压缩存储
为了节省存储单元,可只存储非零元素。由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能迅速确定一个非零元素是矩阵中的哪一个元素。稀疏矩阵的压缩存储会失去随机存取功能。
其中每一个非零元素所在的行号、列号和值组成一个三元组(i,j,aij),并由此三元组惟一确定。
稀疏矩阵进行压缩存储通常有两类方法:顺序存储和链式存储。链式存储方法【参见参考书目】。

2、三元组表
将表示稀疏矩阵的非零元素的三元组按行优先(或列优先)的顺序排列(跳过零元素),并依次存放在向量中,这种稀疏矩阵的顺序存储结构称为三元组表。
注意:
以下的讨论中,均假定三元组是按行优先顺序排列的。
【例】下图(a)所示的稀疏矩阵A的三元组表表示见图(b)

(1)三元组表的类型说明
为了运算方便,将矩阵的总行数、总列数及非零元素的总数均作为三元组表的属性进行描述。其类型描述为:
#define MaxSize 10000 //由用户定义
typedef int DataType; //由用户定义
typedef struct { //三元组
int i,j;//非零元的行、列号
DataType v; //非零元的值
}TriTupleNode;

typedef struct{ //三元组表
TriTupleNode data[MaxSize]; //三元组表空间
int m,n,t; //矩阵的行数、列数及非零元个数
}TriTupleTable;

(2) 压缩存储结构上矩阵的转置运算
一个m×n的矩阵A,它的转置矩阵B是一个n×m的矩阵,且:
A[i][j]=B[j][i],0≤i<m,0≤j<n,
即A的行是B的列,A的列是B的行。
【例】下图中的B和上图中的A互为转置矩阵。


①三元组表表示的矩阵转置的思想方法
第一步:根据A矩阵的行数、列数和非零元总数确定B矩阵的列数、行数和非零元总数。
第二步:当三元组表非空(A矩阵的非零元不为0)时,根据A矩阵三元组表的结点空间data(以下简称为三元组表),将A的三元组表a->data置换为B的三元组表b->data。

②三元组表的转置
方法一:简单地交换a->data中i和j中的内容,得到按列优先顺序存储倒b->data;再将b->data重排成按行优先顺序的三元组表。
方法二:由于A的列是B的行,因此,按a->data的列序转置,所得到的转置矩阵B的三元组表b->data必定是按行优先存放的。
按这种方法设计的算法,其基本思想是:对A中的每一列col(0≤col≤a->n-1),通过从头至尾扫描三元组表a->data,找出所有列号等于col的那些三元组,将它们的行号和列号互换后依次放人b->data中,即可得到B的按行优先的压缩存贮表示。具体实现参见【动画演示】

③具体算法:
void TransMatrix(TriTupleTable *b,TriTupleTable *a)
{//*a,*b是矩阵A、B的三元组表表示,求A转置为B
int p,q,col;
b->m=a->n; b->n=a->m; //A和B的行列总数互换
b->t=a->t; //非零元总数
if(b->t<=0)
Error("A=0"); //A中无非零元,退出
q=0;
for(col=0;col<a->n;col++) //对A的每一列
for(p=0;p<a->t;p++) //扫描A的三元组表
if(a->data[p].j==col){ //找列号为col的三元组
b->data[q).i=a->data[p].j;
b->data[q].j=a->data[p].i;
b->data[q].v=a->data[p].v;
q++;
}
} //TransMatrix

④算法分析
该算法的时间主要耗费在col和p的二重循环上:
若A的列数为n,非零元素个数t,则执行时间为O(n×t),即与A的列数和非零元素个数的乘积成正比。
通常用二维数组表示矩阵时,其转置算法的执行时间是O(m×n),它正比于行数和列数的乘积。
由于非零元素个数一般远远大于行数,因此上述稀疏矩阵转置算法的时间大于通常的转置算法的时间。

上一页

3、带行表的三元组表
为了方便某些矩阵运算,在按行优先存储的三元组表中,加入一个行表来记录稀疏矩阵中每行的非零元素在三元组表中的起始位置。这就是带行表的三元组表。
(1)类型描述
#define MaxRow l00 //在三元组表定义前加入此最大行定义
typedef struct {
TriTupleNode data[MaxSize];
int RowTab[MaxRow];//行表,应保证m≤MaxRow
int m,n,t;
}RTriTupleTable;

(2)带行表的三元组表的操作
① 对于任给行号i(0≤i≤m-1),能迅速地确定该行的第一个非零元在三元组表中的存储位置为RowTab[i]
② RowTab[i](0≤i≤m-1)表示第i行之前的所有行的非零元数。
③ 第i行上的非零元数目为RowTab[i+1]-RowTab[i](0≤i≤m-2)
④ 最后一行(即第m-l行)的非零元数目为t-RowTab[m-1](t为矩阵的非零元总数)
注意:
若在行表中令RowTab[m]=t(要求MaxRow>m)会更方便 些,且t可省略。
带行表的三元组表可改进矩阵的转置算法,具体【参阅其它参考书】。

4.稀疏矩阵压缩存储方式分析
(1) 三元组表和带行表的三元组表的特点
相应的算法描述较为简单,但这类顺序存储方式对于非零元的位置或个数经常发生变化的矩阵运算就显得不太适合。
【例】执行将矩阵B相加到矩阵A上的运算时,某位置上的结果可能会由非零元变为零元,但也可能由零元变为非零元,这就会引起在A的三元组表中进行删除和插人操作,从而导致大量结点的移动。对此类运算采用链式存储结构为宜。

(2)稀疏矩阵的链式结构
稀疏矩阵的链式结构有十字链表等方法,适用于非零元变化大的场合,比较复杂,可【参阅其它参考书】。

⑷ 矩阵的压缩存储是什么

二维数组在形式上是矩阵,因此一般用二维数组来存储矩阵。在不压缩存储的情况下,矩阵采用按行优先或按列优先方式存储,占用的存储单元数等于矩阵的元素个数。在实际应用中,经常出现一些阶数很高的矩阵,同时在矩阵中非零元素呈某种规律分布或者矩阵中有大量的零元素,若仍然用常规方法存储,可能存储重复的非零元素或零元素,这将造成存储空间的大量浪费。因此对这类矩阵进行压缩存储,从而合理地利用存储空间。

为了节省存储空间,可以利用特殊矩阵的规律,对它们进行压缩存储,也就是说为多个值相同的元素只分配一个存储单元,对零元素不分配空间。适合压缩存储的矩阵一般是值相同的元素或者零元素在矩阵中分布有一定规律的特殊矩阵和稀疏矩阵。常见的特殊矩阵有对称矩阵、三角矩阵和对角矩阵。

⑸ 稀疏矩阵的压缩存储方法有

稀疏矩阵的压缩存储,数据结构提供有 3 种具体实现方式:
三元组顺序表;
行逻辑链接的顺序表;
十字链表;

⑹ 稀疏矩阵的压缩存储只需要存储什么

非零元素。

对于一个用二维数组存储的稀疏矩阵Amn,如果假设存储每个数组元素需要L个字节,那么存储整个矩阵需要m*n*L个字节。但是,这些存储空间的大部分存放的是0元素,从而造成大量的空间浪费。为了节省存储空间,可以只存储其中的非0元素。

(6)稀疏矩阵的压缩存储方法有两种扩展阅读

稀疏矩阵算法的最大特点是通过只存储和处理非零元素从而大幅度降低存储空间需求以及计算复杂度,代价则是必须使用专门的稀疏矩阵压缩存储数据结构。稀疏矩阵算法是典型的不规则算法,计算访存比很低,并且计算过程中的访存轨迹与稀疏矩阵的稀疏结构相关。

⑺ 矩阵的压缩存储例子

稀疏矩阵压缩存储

一般来讲,零元素多到了一定程度并且没有规律分布的矩阵叫做稀疏矩阵。对稀疏矩阵的压缩存储必须充分考虑以下三个问题:
① 尽可能减少或者不存储零元素以节省空间,降低空间复杂度。
② 尽可能快地实现数据元素的存储位置与原有位置之间的转换。
③ 尽可能不与零元素进行运算,以降低时间复杂度。
稀疏矩阵的压缩存储有三种最常见的方法,分别是三元组顺序表、行逻辑链接顺序表和十字链表。

⑻ 怎样压缩矩阵元素的存储空间

AC
稀疏矩阵(SparseMatrix):是矩阵中的一种特殊情况,其非零元素的个数远小于零元素的个数.
压缩存储:为多个值相同的元素只分配一个存储空间;对0元素不分配空间.目的是节省大量存储空间.
当使用三元组顺序表(又称有序的双下标法)压缩存储稀疏矩阵时,对矩阵中的每个非零元素用三个域分别表示其所在的行号,列号和元素值.它的特点是,非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算.当矩阵中的非0元素少于1/3时即可节省存储空间.

⑼ 稀疏矩阵主要有哪些压缩存储结构

应该是压缩存储的方法吧...严蔚敏的书主要介绍的有三元组表示的稀疏矩阵的两种压缩存储方法

⑽ 稀疏矩阵的三种存储方式

常见的有三元组表示法、带辅助行向量的二元组表示法(也即行逻辑链表的顺序表),十字链表表示法

阅读全文

与稀疏矩阵的压缩存储方法有两种相关的资料

热点内容
有效算法必须满足哪几个特性 浏览:63
开心一笑解压视频 浏览:145
建app需要学什么 浏览:546
内卷程序员病倒图片 浏览:189
w10专业版连接不了共享文件夹 浏览:537
单片机同步数据汇报 浏览:372
数据结构就是算法 浏览:956
鲁班经pdf 浏览:662
安卓剪映如何下载51版本 浏览:143
编程键盘轴 浏览:959
权力卫士app如何操作 浏览:44
王者荣耀安卓手机怎么打开 浏览:277
安卓通知横幅如何变大 浏览:787
没有编译的redis怎么启动 浏览:994
hadoop日志命令 浏览:989
服务器的物理地址英文怎么说 浏览:729
制作又解压又好玩的黏土 浏览:881
linuxsocket编程pdf 浏览:15
adpcm编译码基本原理 浏览:663
怎么从app上找到集市 浏览:867