矩阵的压缩存储
5.1 普通矩阵的存储
-
用二维数组存储
分为行优先和列优先:
行优先:优先存放一行的数据。
列优先:优先存放一列的数据。
- 注意下标是从0还是1开始的!
5.2 对称矩阵的存储
-
对称矩阵定义
若n阶方阵中任意一个元素 a i , j a_{i,j} ai,j都有 a i , j = a j , i a_{i,j}=a_{j,i} ai,j=aj,i。
-
压缩存储策略
只存储上或下三角区和主对角线。
-
例:按行优先将各元素存入一维数组中
-
数组大小应为多大?
1 + 2 + 3 + 4... + n = ( 1 + n ) ∗ n / 2 1+2+3+4...+n=(1+n)*n/2 1+2+3+4...+n=(1+n)∗n/2
-
如何把矩阵下标转化为一维数组下标?
- 因为矩阵对称,所以可以将上三角区域元素的i和j互换,就变成和下三角区域一样了
i ( i − 1 ) / 2 i(i-1)/2 i(i−1)/2是第i行前1~i-1行的所有元素数量;
j − 1 j-1 j−1是 a i , j a_{i,j} ai,j元素在第i行的前的元素数量。如图:
-
5.3 三角矩阵的压缩存储
-
三角矩阵
上三角区域或者下三角区域为一常量。
-
存储方法
非常量区域和对称矩阵存储方法一毛一样。
在数组最后存储常量的值。
5.4 三对角矩阵的压缩存储
-
三对角矩阵的定义
当 ∣ i − j ∣ > 1 |i-j|>1 ∣i−j∣>1,有 a i , j = 0 a_{i,j}=0 ai,j=0。
-
存储方式
只要存储值不为0的元素就好。
-
如何将数组下标k转换为矩阵下标i,j?
-
5.5 稀疏矩阵的压缩存储
-
稀疏矩阵定义
非零元素远少于矩阵元素个数。
-
存储方式
1.顺序存储
会失去随机存储的特性。
2.链式存储——十字链表法