数组:
一维数组:

二维数组:


数组特性

一维数组的存储结构:
(loc为..的地址)

二维数组的存储结构:



特殊矩阵的压缩储存:
对称矩阵:

由于对称性,不妨只讨论主对角线和下三角的情况
当i>=j时,元素在下半部分
讨论下标为i,j在一维数组中的下标:(即求按照行优先储存下标i,j前一共有多少个元素)
行下标为0的行有1个元素
行下标为1的行有2个元素
......
行下标为i的行前一共有1+2+3+..+i=(1+i)*(i)/2
列下标j说明i,j前有j列,下标i,j是第(1+i)*(i)/2+j+1个元素
所以,下标i,j的元素在压缩矩阵中对应的下标为(1+i)*(i)/2+j
由对称性可得,当i<j时,i,j的元素在压缩矩阵中对应的下标为(j+1)*j/2+i

结论:
对称矩阵下标i,j 压缩矩阵下标k,则有

对称矩阵压缩后压缩矩阵仍具有随机存储性
上三角矩阵:
主对角线下发元素都相等



推导:上三角矩阵中a(i,j)在压缩矩阵的下标k
行下标为0的行 有n个元素
行下标为1的行 有n-1个元素
行下标为2的行 有n-2个元素
......
行下标为i-1的行:n-i+1个元素
行下标为i的行: 前面有j-i个元素
k=n+(n-1)+...+(n-i+1)+j-i=(n+n-i+1)*(i)/2+j-i=(2n-i+1)*i/2+j-i
当i<j时,a(i,j)为常数储存在压缩矩阵的最后一个位置,上三角+主对角线一共1+2+3+...+n=(1+n)*n/2,所以最后一个下标为(1+n)*n/2
结论:
上三角矩阵中a(i,j)在压缩矩阵的下标k

例题:





886

被折叠的 条评论
为什么被折叠?



