数据结构——数组对特殊矩阵的压缩存储(三角矩阵,三对角矩阵)
一、对称矩阵
上三角区和下三角区的对应元素相同,将n阶矩阵存放在一维数组A【n(n+1)/2】中

1、数组下标从0开始
设数组下标为k,矩阵元素a(i,j)
k=i(i-1)/2+j-1,i>=j(下三角区和对角线元素)
k=j(j-1)/2+i-1,j>i(上三角区元素)
解释:
下三角区:矩阵从行下标1开始,i行前有i-1行,第一行一个元素,i-1行有i-1个元素,等差数列求和,第i行有j个元素,因为数组下标从0开始,故最后需要-1;
上三角区:矩阵从列下标1开始,j列前有j-1列,第一列一个元素,j-1列有j个元素,等差数列求和,第j列有i个元素,最后-1;
2、数组下标从1开始
删除最后的-1,其余与数组下标从0开始一致
3、矩阵下标从0开始
(本人不确定是否矩阵有从0开始这种说法,仅仅是自己的理解,欢迎大佬指正)
可以理解成换元,只要将数组下标情况中的i,j全部替换为i+1或j+1即可
解释:原来的式子中默认从1开始,而现在从0开始,0+1=1,i+1=i,如是替换
二、三角矩阵
1、下三角矩阵
上三角区的所有元素均为同一常量,仅需一个数组单元存储,n阶矩阵用A【n(n+1)/2+1】数组存储
设数组下标为k,矩阵元素a(i,j),数组下标从0开始;
k=i(i-1)/2+j-1,i>=j;
k=n(n+1)/2,j>i;
解释:与对称矩阵类似
2、上三角矩阵
下三角区所有元素为同一常量
k=(i-1)(2n-i-2)/2+j-i,j>=i;
k=n(n+1)/2,i>j;
解释:i行前共i-1行,第一行n个元素,第i-1行n-i+2个元素,第i行j-i+1个元素,数组下标从0开始,最后-1;
三、三对角矩阵(带状矩阵)

所有非零元素集中在以主对角线为中心的三条对角线的区域,其余区域元素都为0;
首行和尾行为2个元素,其余各行3个元素,对于列同理;
1、数组下标从0开始
设数组下标为k,矩阵元素a(i,j)
k=2i+j-3;
解释:i行前i-1行共3(i-1)-1个元素,因为第一行少一个,第i行有j-i+2个元素,因为数组下标从0开始,最后-1。
若已知k,求i,j:
i=floor[(k+1)/3+1];
解释:k+1相当于补齐第一行缺失的一个元素,除三是因为每行视为3个元素,+1是因为数组下标从0开始,计算k时-1,现在+1抵消
j=k-2i+3
解释:从k的计算公式来的
2、数组下标从1开始
k=2i+j-2
i=floor[(k+1)/3]
j=k-2i+2
更多推荐
所有评论(0)