对称矩阵压缩存储的地址计算
设有一个10对称矩阵A,采用压缩存储,a[0][0]地址为1000,每个元素占两个字节,则a[3][6]地址为多少?
对对称阵进行压缩存取是将对称元素只存一个,并将数据存储在一维数组中
首先来确定a[i][j]在b[k]中的i,j与k的关系
首先是判定i与j的关系, 如果是下三角存储,则分一下两种情况
1、如果i<j,
则交换i与j的值,将上copy三角的位置值变换到下三角位置
2、如果i>=j,则不用执行操作直接走下面的流程
此时,i表示行坐标,j表示了坐标i之前有i行,即有1+2+...+i = (i+1)*i/2,在i标识的第i+1行有j+1个元素,由此zd可以确定k的值为(i+1)*i/2+j+1 = k+1 由此可得k = (i+1)*i/2+j
由此可以的,a[3][6], i=3, j=6, 由于i<j, 交换得i=6, j=3
由此 k = (6+1)*6/2+3 = 24
又由于&b[0] = 1000 每个元素占两个字节, 则b[24] = 1000+2*24 =
1048
由此便得到a[3][6]的地址为1048