Files
2022-WangDao-CS-DS-Notes/3.6特殊矩阵的压缩存储.md
2022-03-29 10:52:53 +08:00

3.1 KiB
Raw Permalink Blame History

特殊矩阵的压缩存储

一、数组的存储结构

一维数组a[N] 逻辑上连续存放,物理上(内存中)也连续存放 数组元素$$a[i]$$的物理地址=LOC+i*sizeof(ElemType)

二维数组a[N][M] 逻辑上是n行n列的矩阵物理上内存中行优先存储列优先存储的连续存放 行优先存储:数组元素$$a[i][j]$$的物理地址=LOC+(i*N+j)*sizeof(ElemType) 列优先存储:数组元素$$a[i][j]$$的物理地址=LOC+(J*M+i)*sizeof(ElemType)

普通矩阵的存储可用二维数组存储。

二、特殊矩阵的存储

①对称矩阵 ②三角矩阵 ③三对角矩阵 ④稀疏矩阵

2.1对称矩阵的压缩存储

对称矩阵a_{i,j}=a_{j,i} 方法:一维数组$$a[N]$$只存主对角线+下三角区(或主对角线+上三角区) 存储数组的大小:N=\frac{n(n+1)}{2} 数组下标范围:0 ~ \frac{n(n+1)}{2}-1 行优先存储:数组下标:k=\begin{cases} \frac{i(i-1)}{2}+j-1, \quad i \geq j(下三角区和主对角线元素)\\ \frac{j(j-1)}{2}+i-1, \quad i<j(上三角区元素a_{i,j}=a_{j,i}) \end{cases}

2.2三角矩阵的压缩存储

下三角矩阵:除主对角线和下三角区,其余的元素都相等 方法:一维数组$$a[N]$$存主对角线+下三角区,在最后多加一个位置存常其余相等元素 存储数组的大小:N=\frac{n(n+1)}{2}+1 数组下标范围:0 ~ \frac{n(n+1)}{2} 行优先存储:数组下标:k=\begin{cases} \frac{i(i-1)}{2}+j-1, \quad i \geq j(下三角区和主对角线元素)\\ \frac{n(n+1)}{2}, \quad\quad\quad\quad i<j(上三角区元素) \end{cases}

上三角矩阵:除主对角线和上三角区,其余的元素都相等 方法:一维数组$$a[N]$$存主对角线+下三角区,在最后多加一个位置存常其余相等元素 存储数组的大小:N=\frac{n(n+1)}{2}+1 数组下标范围:0 ~ \frac{n(n+1)}{2} 行优先存储:数组下标:k=\begin{cases} \frac{(i-1)(2n-i+2)}{2}+(j-i), \quad i \geq j(下三角区和主对角线元素)\\ \frac{n(n+1)}{2}, \quad\quad\quad\quad\quad\quad\quad~ i<j(上三角区元素) \end{cases}

2.3三对角矩阵的压缩存储

三对角矩阵,又称带状矩阵。 方法:一维数组$$a[N]$$存带状部分 存储数组的大小:N=3n-3+1 数组下标范围:0 ~ 3n-3 行优先存储 i和j计算数组下标kk=2i+j-3 数组下标k计算i和j$$i=\lceil (k+2)/3 \rceil$$j=k-2i+3

2.4稀疏矩阵的压缩存储

稀疏矩阵:非零元素的个数远远少于矩阵元素的个数。

方法一:顺序存储——三元组<行,列,值>行列从1开始

i j v
1 3 4
1 6 5
2 2 3

方法二:链式存储——十字链表法

1637932175187