矩阵的压缩存储

419 阅读1分钟

数组的存储结构

一维数组

ElemType型一维数组:ElemType a[10]; 起始位置:LOC

  • 各数组元素大小相同,且物理上连续存放
  • 数组元素a[i]的存放地址 = LOC + i * sizeof(ElemType)

二维数组

2行4列的二维数组:ElemType b[2][4]
起始位置:LOC

  • 两种不同存储策略:行优先、列优先。将非线性二维数组拉成线性的
  • M行N列的二维数组b[M][N]按行优先存储,则b[i][j]的存储地址为LOC+(i*N+j)*sizeof(ElemType)
  • M行N列的二维数组b[M][N]按列优先存储,则b[i][j]的存储地址为LOC+(j*M+i)*sizeof(ElemType)

特殊矩阵

对称矩阵的压缩存储

压缩存储策略:只存储主对角线 + 下三角区/上三角区

按行优先原则将各元素存入一维数组中

三角矩阵的压缩存储

三对角矩阵(带状矩阵)

稀疏矩阵的压缩存储

稀疏矩阵:非零元素远远少于矩阵元素的个数

顺序存储--三元组<行,列,值>
链式存储--十字链表法:向下域down,向右域right

常见考题

  • 矩阵的压缩存储需要多长的数组
  • 由矩阵行列号<i,j>推出对应的数据下标号k
  • 由k推出<i,j>
    1. 如何处理不等式中的“刚好大于等于/小于等于”
    2. 向上取整/向下取整
  • 易错点
    1. 存储上三角?下三角
    2. 行优先?列优先?
    3. 矩阵元素的下标从0?1?开始
    4. 数组下标从0?1?开始