前言
矩阵存储主要还是将线性代数矩阵性质存储到一维或是多维数组中,题目一般都是问在数组的下标是几和下标与矩阵系数的对应关系,对于这种题目画个图设置一个简单的参数代进选项中的公式验证就好了。
有不足之处或是不懂之处尽请评论区留言。
一、数组的存储方式
以一维数组A[0...n-1]为例,其存储结构关系式为:
其中L是每个数组元素所占的存储方式。
对于多维数组,有两种映射方法:按行优先和按列优先。
1.按行优先
设二维数组的行下标与列下标的范围分别为[0,h1]与[0,h2]。
1.按列优先
二、特殊矩阵的压缩存储
1.对称矩阵
很明显对于该矩阵a12与之对应相等的值是a21,也就是说可以二者同指向数组同一个下标便可压缩存储。那么我们只需要存储下三角的元素即可,上三角的元素只需要i,j互换就好了,因此元素下标之间的对应关系如下:
2.三角矩阵
对于下三角矩阵:
根据等差数列前n行的元素为i*(i+1)/2,与下标我们需除去自身一行,既i=i-1.
对于上三角矩阵:
与下三角矩阵相反,为n+n-1+...+1.
第i-1行有n-i+2个元素。
3.三对角矩阵
在三对角矩阵中,所有非零元素都集中在主对角线为中心的3条对角线的区域,其他区域的元素都为零。
由此可以计算矩阵A三条对角线的元素a_{i,j}在一维数组B中存放的下标为:
公式不推荐背,因为真的很好算,画个图思路痕清晰。
4.稀疏矩阵
矩阵中非零元素个数x,而整个矩阵中总元素个数为t,则当S=x/t\leq 0.05时称为稀疏矩阵。
稀疏矩阵的三元组既可以采用数组存储:
也可以采用十字链表法存储: