二维数组存放的对称矩阵,将其压缩存储于一个一维数组中时,下标的转换算法
比如二维数组存放一对称矩阵a[i][j]=a[j][i]
将其压缩存放入一一维数组b[k]
书上只给出结论:
i>=j时
k=i(i-1)/2+j-1
i<j时
k=j(j-1)/2+i-1
可能答案记得不准确,但我不知道是怎么推导出来的,谁能写一下推导步骤。
问题点数:20、回复次数:5Top
1 楼metaphor(真流星蝴蝶剑)回复于 2004-10-04 15:33:00 得分 0
1)对于i>=j时
第一行的1个元素放在0开始的地方
第二行的2个元素放在0+1开始的地方
第三行的3个元素放在0+1+2开始的地方
……
第i行的i个元素放在0+1+……+(i-1)的地方
0+1+……(i-1)=i(i-1)/2
而a[i][j]离这一行首地址的偏移量为j-1
所以k=i(i-1)/2+j-1
2)由于是对称矩阵,i<j时只要交换i,j的位置就可以了Top
2 楼rkhw(C++是啥玩意)回复于 2004-10-04 19:06:19 得分 0
如果(i-1)i/2是a[i][i]的地址,那为什么要将它加上a[i][j]对于a[i][0]的偏移量得出的是a[i][j]的地址。
还是有点抽象啊Top
3 楼metaphor(真流星蝴蝶剑)回复于 2004-10-05 10:51:54 得分 0
(i-1)i/2是a[i][0]的地址,这样就好啦Top
4 楼rkhw(C++是啥玩意)回复于 2004-10-05 12:54:37 得分 0
这回更不明白了,为什么(i-1)i/2是a[i][0]的地址?Top
5 楼metaphor(真流星蝴蝶剑)回复于 2004-10-07 10:46:38 得分 20
a[0][0]
a[1][0],a[1][1]
a[2][0],a[2][1],a[2][2]
……
放的顺序是这样的,是下三角矩阵Top




