对于一个n阶的对称矩阵A,将其下三角区域(含主对角线)的元素按行存储在一维数组S中,设元素A[i][j]存放在S[k]中,且S[1]=A[0][0],则k与i,j(i≤j)的对应关系是()

B.k = j(j+1)/2+i+1

请先 登录 后评论

1 个回答

亚里士德
擅长:互联网

知识点:数据结构-特殊矩阵

书上位于3.2.2章节。

近几年经常考这特殊的矩阵的公式。


2023-08-22更新:

解这个题需要一点基础知识,这里尝试铺垫一下。

这题的难点和容易粗心的地方就是最后的【调换步骤】可能会忘记。


对称矩阵:

想象在一个平面上,有若干个小正方形,它们上面画了一些数字,它们全部组合拼接成了一个大正方形,横着数有n个,竖着数也有n个,这样的话就可以明白题目中的n阶了。这个矩阵按照从【左上角到右下角】的对角线折叠一下(假设不包括对角线上的矩形。其实包括也可以),重合的小正方形里的【值是一样的】,也就是A[i][j] = A[j][i](根据题目,假设i是横坐标,j是纵坐标,A是这个大正方形对应的二维数组,且整个坐标系在第四象限中。书中的算法涉及到二维数组的部分,一般都是在第四象限里),所以叫它对称矩阵(如下图)。

我们发现了这个规律,所以可以尝试使用一维数组来存这个二维数组的内容,就可以节省差不多一半的存储空间了。

202308221720083.png

题目要把【下三角区域】的内容放到一维数组S中,也就是在方阵中靠左边这一团放到一维数组中,也就是要看这些小正方形的坐标和一维数组的坐标怎么才能一一对应上。可以发现,左下角这一团的【坐标有个规律】就是i>j(如果不考虑相等),而右上角的是相反的j>i,也就是题目要求的条件。


解题:

快速的方法仍然是先写出几个值来,然后带入运算。

题中说,S[1]=A[0][0],也就是最左上角那个坐标为(0,0)的,对应的是一维数组的位置1,和书上不同,书上是0。那么数小正方形的顺序是一行一行的来,过了对角线了进入下一行。

现在在图中可以发现,下一个一定是S[2] = A[1][0],后面的是S[3] = A[1][1],S[4] = A[2][0],S[5] = A[2][1],

而题目中问的是【i≤j】,根据对称矩阵的性质,把【坐标进行调换】【仍然和左边相等】,也就是类似S[5] = A[1][2]等等。

把调换后的后面的这些数值带入选项中给出的公式进行计算,看看和S里面的数字是否相等。最后发现只有B选项是相等的,比如5 = 3+1+1。所以选B。

请先 登录 后评论
  • 1 关注
  • 0 收藏,1417 浏览
  • 亚里士德 提出于 2021-09-01 05:16

相似问题