5.2规律分布特殊矩阵的压缩存储
规律分布的特殊矩阵
元素分布具有一定规律的矩阵称为规律分布的特殊矩阵,如三角矩阵(方阵的上或下三 角全为零)和带状矩阵(若干条对角线含有非零元)。这类矩阵中元素分布的规律可以用数学公 式来反映。已知二维矩阵 A 中元素下标 i 和 j,作为转换函数 f 的自变量,计算出到一维内存空间的地址值 K,即 A[ i][ j]=B[ K],实现了原二维矩阵到压缩存储后的一维数组的存储映射。
1 .三角矩阵
三角矩阵大体分为三类:下三角矩阵、上三角矩阵、对称矩阵。对于一个 n 阶矩阵 A 来 说:若当 i <j 时,有 a ij =c(典型情况 c=0 ),则称此矩阵为下三角矩阵;若当 i>j 时,有 aij =c(典型情 况 c=0 ),则称此矩阵为上三角矩阵;若矩阵中的所有元素均满足 aij =aji,则称此矩阵为对称矩阵。
以图 1 所示的 n×n 下三角矩阵( c=0 )为例,讨论三角矩阵的压缩存储实现。
下三角矩阵的压缩存储原则是只存储下三角的非零元素,不存上三角的零元素。按“行 序为主序”进行存储,得到的序列是 a11 ,a21 ,a2 2 ,a31 ,a32 ,a33 ,…, an1 ,an2 ,…, ann。
由于下三角矩阵 A 的元素个数为 n×( n +1 )/ 2 ,即:
下三角矩阵中元素 aij(i>j),在一维数组 B 中的存储地址为:
对于对称矩阵,因其元素满足 aij=aji,我们可以为每一对相等的元素分配一个存储空间, 即只存下三角(或上三角)矩阵,从而将 n2个元素压缩到 n(n+1)/2 个空间中。
实际应用中,如果将矩阵 A[][]压缩到一个一维数组 B[]中,我们更关心其下标的对应关系,即如果将 A[i][j]存储到 B[k],那么如何通过 i 和 j,计算出 k 的值,进而获取 A[i][j] 的值。
下面以下三角为例(假设对角线以上全为 0):
2 .带状矩阵
( 1 )带状矩阵描述:
在矩阵中的所有非零元素都集中在以主对角线为中心的带状区域中。
其中最常见的是三对角带状矩阵,如图 3 所示。
( 2 )三对角带状矩阵特点
( 3 )三对角带状矩阵压缩存储方法
三对角带状矩阵的压缩存储原则为:将带状区域上的非零元素按行序存储。
其压缩存储方法如下。
①确定存储该矩阵所需的一维向量空间的大小
假设每个非零元素所占空间的大小为 size 个单元。从图 3 中观察得知,在三对角带状矩阵中,除了第一行和最后一行只有2个非零元素外,其余各行均有3个非零元素,由此得到:所需一维向量空间的大小为: 2 +2 +3 ×( n -2 )= 3 n-2 ,
如图 4 所示。