矩阵的压缩存储
一、数组的存储结构
1.一维数组
ElemType a[10];
数组元素a[i]的存放地址=LOC+i*sizeof(ElemType); LOC:数组的起始地址,除非特殊说明,否则数组下标从0开始,从1开始,i–>i-1
2.二维数组
ElemType a[2][4]; //2行4列的二维数组(逻辑视角)
- 行优先存储
- 列优先存储
二、特殊矩阵
普通矩阵可以用二维数组来存储
1.对称矩阵(若n阶方阵中任意一个元素Ai,j,都有Ai,j=Aj,i,则该矩阵为对称矩阵)
对称矩阵的压缩存储:
策略:只存储主对角线和下三角区域,按照行优先原则将各个元素存入一维数组中
①数组大小应设置为:
(
1
+
n
)
∗
n
/
2
(1+n)*n/2
(1+n)∗n/2
②压缩存储后怎么使用才方便:可以实现一个映射函数:矩阵下标---->一维数组下标
按照行优先原则:Ai,j是第几个元素:(上三角存储只需要把i,j互换一下即可)
i
(
i
−
1
)
2
+
j
\frac{i(i-1)}{2}+j
2i(i−1)+j
对应的数组下标 -1 即可
2.三角矩阵(除了主对角线和上/下三角区,其余元素都相同,称为:上/下三角矩阵)
压缩存储策略:
按照行优先原则,将上/下三角区域存入一维数组,并在最后一个位置存储常量c
3.三对角矩阵(带状矩阵)
当 [i-j]>1时,有Ai,j=0 (1<=i,j<=n)
压缩存储策略:按照行优先原则存储带状部分(一维数组大小应该为3n-2)
4.稀疏矩阵(非零元素远远少于矩阵元素的个数)
压缩存储策略:
①顺序存储----三元组<行,列,值>
②链式存储----十字链表法