3.4特殊矩阵和压缩矩阵
类比数组:
一维数组:
二维数组,采用映射的方法:按行优先和按列优先
行优先:
列优先:
矩阵的压缩存储
矩阵的压缩存储:指多个值相同的元素只分配一个存储空间,队零元素不分配存储空间。
特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或者零元素的分布具有一定规律的矩阵。(对称矩阵、上(下)三角矩阵、对角矩阵)
对称矩阵 :若一个n阶方阵A[1…n][1…n]
中的任意一个元素ai.j,都有ai,j=aj,i(1<=i,j<=n),则称其为对称矩阵。
将矩阵存储中的元素存储到一维数组B[n(n+1)/2]中,矩阵中的元素ai,对应数组B中下标为k的元素。
推理过程:
下三角区和对角线上的元素:
@存储在下三角区和对角线上的元素ai,j
@第一行存 一个,第二行存两个,第三行存 三个,第i行存储i个元素,第i行存j个。
@所以ai,j是数组B中的第1+2+3+…(i-1)+j=i(i-1)/2+j个元素。
@如果数组B下标从0开始,那么ai,j元素存在下标为i(i-1)/2+j-1的位置,即k=i(i-1)/2+j-1的位置即k=i(i-1)/2+j-1;
上三角区:(和下三角对称 i和j交换)
k=j(j-1)/2+i-1;
三角矩阵:
定义:下三角矩阵的上三角区都是同一常数,上三角矩阵的下三角区都是同一常数。
存储思想:与对称矩阵类似,不同之处在于存储完下三角去和主对角线上的元素之后,紧接着存储主对角线上方的常量一次,故可以将下三角矩阵A[1…n][1…n]
压缩存储在B[n(n+1)/2+1]中。
下三角矩阵:
对于下三角区和对角线上的元素存储和对称矩阵是一样的。即对于下三角元素,如果数组B中下标从0开始,那么ai,j元素存在下标为k=i(i-1)/2+j-1的位置,对于上三角元素存储在下标为n(n+1)/2位置即可。
上三角矩阵:
推理过程:
@存储在下三角区和对角线上的元素ai,j。
@第一行存 n个,第一行存n-1个,第二行存 n-2个,第i-1行存储n-(i-2)个元素,ai,j是第i行的第j-i+1个元素。
@k=n+n-1+n-2+…+n-(i-2)+j-i+1=(2n-i+2)(i-1)/2+j-i+1-1=(2n-i+2)(i-1)/2+j-i;
对于下三角元素存储在下标为n(n+1)/2位置即可。
三对角矩阵:
定义:也称为带状矩阵。对于n阶方阵A中的任意元素ai.j,当|i-j|>1时,有ai,j=0(1<=i,j<=n),则称为三对角矩阵。
存储思想:将3条对角线上的元素按行优先方式存放在一维数组B中
推理过程:
@i=1时,k=j-1
@i>1,第一行存储两个元素,接下来除去最后一行和第一行一共i-2行,每行都有三个元素ai,j在后一行时j-i+1个元素。所以ai,j在数组中时第2+(i-2)3+j-i+2=2i+j-2个元素,所以下标k=2*i+j-3。
若已知对应在一维数组中的下标K,求其在二维数组中的位置,
推到过程:
@位置k的元素的实际是第k+1个元素,前面一共k个元素
@出去第一行,还有k-2个元素,这k-2每达到3,那么k+1元素就进入下一行,行数加一,而且是从第二行开始的。如果不到三个,向下取整。
即i=[(k-2)/3+2]=[(k+1)/3+1]
@由于在第i行,前i行有2+3*(i-2)=3i-4个元素,所以是第i行非0元素的第k±(3i-4)=k-3*i+5
@第i行前面有i-2(i>2)个0,所以j=k-3i+5+i=k-2i+3。
稀疏矩阵:
定义:矩阵中的元素个数s相对于矩阵中非0元素个数t个数来说非常多,即s远大于t。
三元组存储: