三对角矩阵压缩存储--注意对角元素的下标

对角矩阵的压缩存储
  对角矩阵是指所有非零元素全部集中在中心几条对角线上的矩阵。下面以三对角矩阵(所有非零元素集中在中心三条对角线上)为例描述对角矩阵的压缩存储方法。图2-8是一个三对角矩阵,使用一维数组a[m]来压缩存储矩阵信息,则数组中的元素依次为a11,a12,a21,a22,a23,a32,...,am

  其中,矩阵元素aij的下标i、j与其存储在数组中的位置下标k(从0开始计数)存在如下的对应关系:当i=1时,k=j-1(1≤j≤2);当i>1时,k=2×i+j-3(|i-j|≤1)。推导方法如下:
  ① 当i=1时,j的取值就是矩阵元素aij在数组中的存储次序,数组中存储下标为次序减1,故k=j-1。
  ② 当i>1时,在矩阵元素aij之前已经存储了i-1行矩阵元素和第i行的j-i+1个元素,又已知矩阵的第1行需要存储2个元素,第2~i-1行均需要存储3个元素,故矩阵元素aij之前一共存储的元素数有2+(i-1-2+1)×3+(j-i+1)=2×i+j-3。故aij的存储下标为2×i+j-3。
  例如,矩阵元素a33存储在一维数组中的位置为k=2×i+j-3=2×3+3-3=6,即一维数组中的第7元素。

主对角线上方那条有j-i=1,主对角线有j-i=0,下方有j-i=-1,以行为索引 
所以自然可得k=(3i-2)+(j-i);=> k=2i+j-2 
反之当i=j时,k=3i-2=3(i-1)+1,当i=j+1时(下方那条),k=3i-1=3(i-1)+2,当i=j-1时,k=3(i-1) 

所以用k除3取余,设商为x,余为y,y=0则B[k]=a[x+1][x],y=1,B[k]=a[x+1][x+1],y=2,B[k]=a[x+1][x+2]

3.

i,j   k 
1,0   0 
1,1   1 
1,2   2 

2,1   3 
2,2   4 
2,3   5 

3,2   6 
3,3   7 
3,4   8 
k   =   (i+j)+(i-2)   =   2*i+j-2 
i   =   k/3取整+1 
j   =   k/3取整+k%3

转载于:https://my.oschina.net/u/185531/blog/75103

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值