特殊矩阵的压缩存储
数组定义
一维数组视为线性表,二维数组为线性表的线性表
-
一维数组的存储地址为:(数组首地址a0,L为每个元素的存储单位)。
ai=a0+i*L -
二维数组的存储分按行存储和按列存储:(数组首地址a(0,0),L为每个元素的存储单元,h1是行下标最大值,h2是列下标最大值)
-
按行存储
ai=a(0,0)+[i*(h1+1)+J] * L
-
按列存储
ai=a(0,0)+[j*(h2+1)+i] * L
-
上面两个例子用简单的话来说就是一维数组用计算机来表示的位置得一个唯一标识。他的规则是怎么样的。一维数组是首地址+当前下标*元素的存储单元(2B),二维数组的是首地址+(行下标 * 行长度+列下标 )*存储单元。就是这样的一种规则。确定每个元素的存储位置。
数组压缩存储
对称矩阵
二维数组呈现出一种对称的形式,例:a(1,2)=a(2,1)的值相等,他们之间如果还是采用二位数组存储就是浪费一半的空间,所以将这个二维数组压缩到一维数组B里去,达到节省空间的目的。B中存放主对角线和下三角元素。
元素aij在数组B中的下标的对应关系:
K=i(i-1)/2+j-1(下三角和主对角线)K=j(j-1)+i-1(上三角)
三角矩阵
分上三角和下三角,矩阵中上三角矩阵的下三角全为0,不存储,只存储上三角和主对角线的元素。下三角相反。
-
上三角矩阵压缩一维数组B的下标和原上三角的对应关系n为行的个数:
K=(i-2)(2n-i+2)/2 +(j-i)(上三角区和主对角线元素) K=n(n+1)/2
-
下三角矩阵压缩一维数组B的下标和原上三角的对应关系n为行的个数:
K=i(i-1)/2 + j-1(下三角和主对角)K=n(n+1)/2
三对角矩阵
有三条对角线,其余全为o称为三对角矩阵。将三对角按行存储到B中,O不存储。
对应关系:K=2i+j-3
稀疏矩阵
二维矩阵中的有效元素较少的时候,采用,用二维矩阵的行、列、值构成三元组存储。