问答题 设有一个n×n的对称矩阵A。为了节约存储,可以只存对角线及对角线以上的元素,或者只存对角线或对角线以下的元素。前者称为上三角矩阵,后者称为下三角矩阵。把它们按行存放于一个一维数组B中,并称之为对称矩阵A的压缩存储方式。试问:
问答题 存放对称矩阵A上三角部分或下三角部分的一维数组B有多少元素?
【正确答案】B中元素个数是一个等差数列前n项和。数列首项为1,尾项为n。 元素个数:(1+n)×n/2个
【答案解析】
问答题 若在一维数组B中从0号位置开始存放,则对称矩阵A中的任意一个元素aij在只存上三角部分的情形下(如下面一维数组B的存储情况)应存于一维数组的什么下标位置?给出计算公式。
对称矩阵A:

只存A的上三角部分:
【正确答案】当只存上三角部分时,若i≤j,则矩阵元素A[i][j]在第i行,它前面有i-1行(矩阵从第1行1列开始计算),第1行有n个元素,第2行有n-1个元素……,第i-1行有n-i+2个元素。在第i行中,从对角线算起,第j号元素前面有j-i个元素,因此矩阵元素A[i][j]在数组B中的存放位置为 n+(n-1)+(n-2)+…+(n-i+2)+j-i=(2n-i)×(i-1)/2+j-1 若i>j,矩阵元素A[i][j]在数组B中没有存放,可以找它的对称元素A[j][i]。在数组B的第(2n-j)×(j-1)/2+i-1位置中找到。 注意,有的习题要求矩阵从第0行0列开始存放,数组B从0号位置开始存放,则矩阵元素A[i][j]在数组B中的存放位置如下: 当i≤j时,矩阵元素A[i][j]在数组B中的存放位置为n+(n-1)+…+(n-i+1)=(2n-i+1)×i/2+j-i=(2n-i-1)×i/2+j。 当i>j时,找对称元素,矩阵元素A[i][j]在数组B中的存放位置=(2n-j-1)×j/2+i。
【答案解析】