数据结构对称矩阵的压缩存储求数据地址

设有一个10对称矩阵A,采用压缩存储,a[0][0]地址为1000,每个元素占两个字节,则a[3][6]地址为多少?怎么算,步骤或公式,最好两者都给。谢谢了... 设有一个10对称矩阵A,采用压缩存储,a[0][0]地址为1000,每个元素占两个字节,则a[3][6]地址为多少?怎么算,步骤或公式,最好两者都给。谢谢了 展开
 我来答
woxgc
2013-01-17 · TA获得超过1968个赞
知道答主
回答量:108
采纳率:0%
帮助的人:69.3万
展开全部
首先要先看看矩阵的行列表,有时会从1开始,但默认是从0开始
很显然,这里给出的是a[0][0]行列表就是从0开始的
所以a[3][6]就是第3行的第6个元素(这里的3和6指的是下标,实际上是第4行第6个元素)
因为a[3][6]是上三角的元素,所以转换成下三角就是a[6][3]
因为对称矩阵只需存储下三角或上三角
这里以下三角为例
第0行有1个元素,第1行有2个元素,第2行有3个元素.......
第6行第3列前有3个元素
所以Loc(a[3][6]) = Loc(a[6][3]) = Loc(a[0][0]) + ((1+6)*6/2+3)*2 = 1000 + 48 = 1048
计算上三角同理。
反正计算位置时要明白每一行的元素的个数
比如计算 上三角时第一行的元素个数就n个,n是矩阵的阶数,然后以下每行减1,最后用等差公式计算就行
公式的话书本上有,自己翻一下书吧。
qimingxingwen
2013-01-16 · TA获得超过432个赞
知道小有建树答主
回答量:269
采纳率:50%
帮助的人:184万
展开全部
对对称阵进行压缩存取是将对称元素只存一个,并将数据存储在一维数组中
首先来确定a[i][j]在b[k]中的i,j与k的关系
首先是判定i与j的关系, 如果是下三角存储,则分一下两种情况
1、如果i<j, 则交换i与j的值,将上三角的位置值变换到下三角位置
2、如果i>=j,则不用执行操作直接走下面的流程

此时,i表示行坐标,j表示了坐标i之前有i行,即有1+2+...+i = (i+1)*i/2,在i标识的第i+1行有j+1个元素,由此可以确定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
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式