矩阵
数组的存储结构
按行优先
- 先行后列,先存行数较小的元素,若相等再存列号较小的元素
\(A_{2\times 3}= \begin{bmatrix} a_{00}&a_{01}&a_{02} \\ a_{10}&a_{11}&a_{12} \\ \end{bmatrix} \Rightarrow \begin{matrix} a_{00}&a_{01}&a_{02}&a_{10}&a_{11}&a_{12} \end{matrix}\)
按列优先
- 先列后行,先存列数较小的元素,若相等再存行号较小的元素
\(A_{2\times 3}= \begin{bmatrix} a_{00}&a_{01}&a_{02} \\ a_{10}&a_{11}&a_{12} \\ \end{bmatrix} \Rightarrow \begin{matrix} a_{00}&a_{10}&a_{01}&a_{11}&a_{02}&a_{12} \end{matrix}\)
存储结构关系式
\(A_{m\times n}\)为 \(m\) 行 \(n\) 列的矩阵,\(m\) 和 \(n\) 的下标均从 1 开始,\(a\) 的下标从 0 开始,\(L\) 为每个数组元素所占的存储单元
按行优先
- 元素 \(a_{i,j}\) 的存储地址为:
\(LOC(a_{i,j})=LOC(a_{1,1})+[(i-1)\times n+(j-1)]\times L\)
按列优先
- 元素的存储地址为:
\(LOC(a_{i,j})=LOC(a_{1,1})+[(j-1)\times m+(i-1)]\times L\)
存储地址之差
- 对于数组 \(A_{n\times n}\),其元素 \(a_{i,j}\) 按行优先与按列优先存储时地址之差为 \((i-j)\times(n-1)\)
按高优先
三维数组按高下标优先进行存储
E.G.
- 设整型数组 \(a[10][15][20]\),第一个数组元素地址为2000,每个元素占用4个字节,则按高下标优先,元素\(a[5][6][7]\) 的存储地址为
解:
\(LOC=2000+(7\times 10\times 15+6\times 10+5)\times 4\)
矩阵的压缩存储
对称矩阵
- 空间大小:\(\frac{n\times (n+1)}{2}\)
- 元素 \(a_{i,j}\) 与其在数组 B 中的下标 K 之间的关系, \(a\) 的下标均从 1 开始,B 的下标从 0 开始
\(k=\begin{cases} \frac{i\times (i-1)}{2}+j-1,\qquad i\ge j(下三角和主对角线区域) \\[2ex] \frac{j\times (j-1)}{2}+i-1,\qquad i\lt j(上三角区域) \end{cases}\)
三角矩阵
- 空间大小:\(\frac{n\times (n+1)}{2}+1\)
- 最后一个元素:\(A\begin {bmatrix}\frac{n\times (n+1)}{2} \end{bmatrix}\)
- 下三角矩阵元素 \(a_{i,j}\) 与其在数组 B 中的下标 K 之间的关系,\(a\) 的下标均从 1 开始,B 的下标从 0 开始
\(k=\begin{cases} \frac{i\times (i-1)}{2}+j-1,\qquad i\ge j(下三角元素)\\[2ex] \frac{n\times (n+1)}{2},\qquad\qquad\quad i\lt j(上三角元素) \end{cases}\)
- 上三角矩阵元素 \(a_{i,j}\) 与其在数组B中的下标 K 之间的关系
\(k=\begin{cases} \frac{n\times (n+1)}{2},\qquad\qquad\qquad\quad i\ge j(下三角元素)\\[2ex] \frac{(i-1)(2n-i+2)}{2}+(j-i),\quad i\lt j(上三角元素) \end{cases}\)
稀疏矩阵
- 非零元很少且分布没有规律的矩阵
- 仅储存非 0 元素
- 存储方式
- 十字链表(链式存储)
- 三元组(顺序存储)
- 包含行标,列标,对应元素值
三对角矩阵
- 也成为带状矩阵
- 矩阵元素 \(a_{i,j}\) 与其在数组 B 中的下标 K 之间的关系,B 从 0 开始
\(k=2i+j-3\)

浙公网安备 33010602011771号