数据结构——稀疏矩阵的压缩存储
来源:互联网 发布:ubuntu启动黑屏 编辑:程序博客网 时间:2024/06/05 22:31
1.矩阵的压缩存储
对于一些阶树很高的矩阵,如果有许多值相同的元素或者是零元素,可以对其进行压缩以节省存储空间。可以为多个值相同的元只分配一个存储空间;对零元不分配空间。
2.稀疏矩阵
什么是稀疏矩阵?
在一个m*n的矩阵中,有t个元素不为0,t/(m*n)称为稀疏因子,通常认为稀疏因子小于0.05时称为稀疏矩阵。
3.稀疏矩阵的压缩存储
1)三元组顺序表
#define MAXSIZE 12500 //非零元个数的最大值 typedef struct{ int i,j; //非零元的行下标和列下标 ElemType e;}Triple;typedef struct{ Triple data[MAXSIZE+1]; //非零元三元数组表,data[0]未用 int mu,nu,tu; //矩阵的行数、列数和非零元个数}TSMatrix;
2)三元组顺序表存储稀疏矩阵的转置
算法1:
Status TransposeSMatrix(TSMatrix M, TSMatrix &T){ T.mu=M.mu; T.nu=M.nu; T.tu=M.tu; if(T.tu){ q=1; for(col=1;col<=M.nu;++col)//依次遍历原先矩阵M的每一列的非零元 for(p=1;p<=M.tu;++p) if(M.data[p].j==col){ T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q;} } return OK;}
可以看出其时间复杂度为O(nu*tu),而一般转置的时间复杂度为O(mu*nu),可以看出仅仅适合tu《mu*nu时。
如果可以预先确定矩阵M中每一列(即T的每一行)的第一个非零元在其三元数组中的位置,那么对其转置时便可直接放到相应的三元数组的恰当位置上。这样就不用遍历M的每一列了。
因此需要引入两个辅助向量; num[col] M中第col列中非零元的个数
copt[col] M中第col列中第一个非零元的位置
显然
copt[1]=1;
copt[col]=copt[col-1]+num[col-1] 2 ≤col≤M.nu
算法2:快速转置
Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T){ T.mu=M.mu; T.nu=M.nu; T.tu=M.tu; if(T.tu){ for(col=1;col<=M.nu;++col) num[col]=0; for(t=1;col<=M.tu;++t) ++num[M.data[t].j; copt[1]=1; for(col=2;col<=M.nu;++col) copt[col]=copt[col-1]+num[col-1]; for(p=1;p<=M.tu;++p){ col=M.data[p].j; q=copt[col]; T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q;} } return OK;}
其时间复杂度为O(nu+tu),当tu和mu*nu等数量级时,其时间复杂度和经典算法的时间复杂度相同。
3)行逻辑链接的顺序表
三元组顺序表的特点是在表中按行序有序的存储,若需按行号存取某一行的非零元,则需要从头开始找。为了便于随即存取任意一行的非零元,则需知道每一行的第一个非零元在三元组的位置。为次可讲上述中指示行信息的辅助数组copt固定在稀疏矩阵的存储结构中。这种带有行连接信息的三元组表称为行逻辑链接的顺序表。
typedef struct{ Triple data[MAXSIZE+1]; //非零元三元数组表 int rpos[MAXRC+1]; //各行第一个非零元的位置表 int mu,nu,tu; //矩阵的行数、列数和非零元个数}RLSMatrix;
4)矩阵相乘
5)十字链表
- 数据结构——稀疏矩阵的压缩存储
- 【数据结构】特殊矩阵的压缩存储2——稀疏矩阵
- 数据结构进阶(二)矩阵(稀疏矩阵)的压缩存储
- 【数据结构】对称矩阵和稀疏矩阵的压缩存储
- 数据结构学习笔记--稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 矩阵(稀疏矩阵)的压缩存储
- 对称矩阵、稀疏矩阵的压缩存储
- 矩阵的压缩存储————用三元组表存储稀疏矩阵
- 稀疏矩阵压缩存储
- ajax分页实现,感觉跟我想的有点差距,难道是我错了
- 七种qsort排序方法 .
- 上传图片
- tftp的使用
- 12312312321
- 数据结构——稀疏矩阵的压缩存储
- 【POJ2255】Tree Recovery解题报告 思路 + 数据 +代码
- 上传图片,限制类型,大小,规格
- sencha touch 1.1动态改变Chart Axis Title
- SEHLL-test
- 扩大栈内存
- WCF 4 Step By Step Chapter 1,2 Note
- 和老李交流的记录
- HANDLE_##message