对称矩阵
- 定义:即AT=A , ai,j=aj,i(i!=j)
- 压缩办法:因为上三角和下三角对应元素值相同,所以只需要存储下三角部分(含对角线)的元素(一共n(n+1)/2个)
- 存储数据结构:一维数组,设为B[n(n+1)/2]
- 元素ai,j在B中的下标:k=1+2+……+(i-1)+j-1=i(i-1)/2+j-1(i>=j的情况) k=j(j-1)/2+i-1(i<j的情况)
三角矩阵
- 定义:下三角矩阵(上三角区域全是同一常量的元素)即ai,j=C(i<j),上三角矩阵(上三角区域全是同一常量的元素)即ai,j=C(i>j)
- 压缩办法:以下三角为例,从上到下、从左到右的存储元素,最后一个单位空间存储上三角区域的常量值
- 存储数据结构:一维数组,设为B[n(n+1)/2+1]
- 元素ai,j在B中的下标(下三角):k=i(i-1)/2+j-1(i>=j)与对称矩阵相同,k=(1+n)n/2(i<j)(上三角区域的唯一值)
- 元素ai,j在B中的下标(上三角):k=n+(n-1)+……+(n-i+2)+(j-i+1)-1=(2n-i+2)(i-1)/2+j-i(i<=j) , k=(n+1)n/2(i>j)
三对角矩阵
- 定义:即ai,j=0(|i-j|>1),即所有非零元素都集中在中心的三条对角线上。
- 压缩办法:只存储中间三条对角线的元素
- 存储数据结构:一维数组,设为B[3n-2]
- 元素ai,j在B中的下标:k=(i-2)*3+2+2+(j-i)-1=2i+j-3.(这里画下划线部分是第1行到第i-1行的元素个数,+2定位到第i行的中间元素,毕竟除了第1和第n行,每行都只有三个元素,然后j-i决定出是左边右边还是中间的元素,最后减一因为坐标从0开始。)
稀疏矩阵
- 定义:说白了就是建立一个索引,将非零元素及其所在的行和列一起构成一个三元组(行标,列标,值),如此一来就失去了随机存储特性。
- 存储方式:数组存储或十字链表法