1、稀疏矩阵的定义
在一个矩阵中,非零的元素的个数远远多于零元素的个数,并且非零元素的分布没有规律,称为稀疏矩阵。
2、稀疏矩阵的存储
存储稀疏矩阵中非零元素时,必须存储其位置。三元组(i,j,aij)可唯一确定矩阵中的一个元素。稀疏矩阵的三元组表的顺序存储称为三元组顺序表,常用的三元组表的链式存储结构是十字链表。
3、稀疏矩阵中的上三角矩阵与下三角矩阵
主对角线以下都是零的方阵称为上三角矩阵,主对角线以上都是零的方阵称为下三角矩阵。稀疏矩阵大量元素是零,存储一部分内容就已经把有效数据存储了,这可以节省很多空间。存储稀疏矩阵一般存储上三角矩阵或下三角矩阵,如在上三角矩阵或者下三角矩阵中,遇到上半部分和下半部分数据可能重复的情况下,只需要存储上半部分的数据或者下半部分的数据即可。
4、求三角矩阵中某一个元素对应一维数组的下标
稀疏矩阵 | 计算方法 |
---|---|
上三角矩阵 | 下标分别为i和j的元素对应的一维数组的下标计算公式是:(2 n - i + 1) * i / 2 + j |
下三角矩阵 | 下标分别为i和j的元素对应的一维数组的下标计算公式是:(i + 1) * i / 2 + j |
示例:
设有如下所示的下三角矩阵 A [ 0..8 ,0..8 ],将该三角矩阵的非0元素(即:行下标不小于列下标的所有元素)以行优先压缩存储到 M [ 1...m ]中,则元素 A [ i , j ] (0<=i<8,j<=i)存储在数组M中的( )中?A(0,0) A(1,0) A(1,1) A(2,0) A(2,1) A(2,2) A(2,0) A(2,1) A(2,2) A(2,3) . . . . . . A(8,0) A(8,1) A(8,2) A(8,3) A(8,4) . . . . . A(8,8)
答案: M [ (i + 1) * i / 2 + j+1 ]
分析:
将A(0,0)即:i=0,j=0代入 (i + 1) * i / 2 + j 中,看结果是不是M [ 1 ]中的1。很明显,计算结果是0。这里将0加1后的结果才是1,所以我们考虑M中的结果是 (i + 1) * i / 2 + j+1。将A [2,1]中i=2,j=1代入推算的公式: (i + 1) * i / 2 + j+1,发现A[1,2]对应M [5 ],满足条件。通过代入矩阵中的其它元素后,发现我们推导的公式: (i + 1) * i / 2 + j+1是满足题意的。所以,答案是:M [ (i + 1) * i / 2 + j+1 ]