考研数据结构精讲:数组与特殊矩阵的压缩存储技巧
一、数组基础概念
1.1 数组的定义
数组是由相同数据类型的元素构成的有限序列,具有以下核心特性:
- 维度特性:支持一维到多维结构(常见二维数组)
- 随机访问:通过下标可在O(1)时间访问任意元素
- 固定大小:创建时需确定维度与各维长度
1.2 数组存储结构
数组采用顺序存储结构,内存单元连续排列,以二维数组为例:
行优先存储公式(C语言采用):
LOC(a[i][j]) = LOC(a[0][0]) + (i*n + j) * L
列优先存储公式(FORTRAN采用):
LOC(a[i][j]) = LOC(a[0][0]) + (j*m + i) * L
📝 记忆技巧:行优先先变右边下标,列优先先变左边下标
二、特殊矩阵压缩存储
2.1 对称矩阵压缩
存储策略:仅存储主对角线+下三角区
元素映射公式(行优先):
k = \begin{cases}
i(i-1)/2 + j-1 & 当i \geq j \\
j(j-1)/2 + i-1 & 当i < j
\end{cases}
2.2 三角矩阵压缩
下三角矩阵存储公式:
k = \begin{cases}
i(i-1)/2 + j-1 & 当i \geq j \\
n(n+1)/2 & 当i < j
\end{cases}
2.3 三对角矩阵
压缩策略:将带状区域映射到一维数组
元素a[i][j]对应位置:
k = 2i + j - 2
2.4 稀疏矩阵处理
当非零元素占比<5%时适用
三元组表示法
typedef struct {int row; // 行号int col; // 列号int value; // 元素值
} Triple;typedef struct {Triple data[MAXSIZE]; // 三元组表int rows, cols, nums; // 总行数、列数、非零元素数
} TSMatrix;
十字链表法
typedef struct OLNode {int row, col;int value;struct OLNode *right, *down;
} OLNode;typedef struct {OLNode *rhead[MAXROW], *chead[MAXCOL];int rows, cols, nums;
} CrossList;
三、应用场景对比
存储方式 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
二维数组 | 稠密矩阵 | 访问速度快 | 空间利用率低 |
对称矩阵压缩 | 对称矩阵 | 节省近一半空间 | 仅适用于对称矩阵 |
三对角压缩 | 带状矩阵 | 高效存储带状数据 | 不适用随机分布数据 |
三元组表 | 稀疏矩阵 | 灵活存储 | 矩阵运算效率低 |
十字链表 | 频繁修改的稀疏矩阵 | 动态操作方便 | 结构复杂 |
四、考研重点题型
- 地址计算:给定存储方式,计算特定元素的存储地址
- 压缩映射:将特殊矩阵元素映射到压缩数组的对应位置
- 结构设计:根据场景选择合适压缩存储方式
- 算法实现:稀疏矩阵转置、加法等操作实现
五、实战演练(C语言示例)
对称矩阵压缩存储实现:
#define N 5
int symMatrix[N*(N+1)/2]; // 压缩存储数组// 存储元素
void setElement(int i, int j, int val) {if(i >= j) {int k = i*(i-1)/2 + j-1;symMatrix[k] = val;}
}// 获取元素
int getElement(int i, int j) {if(i >= j) {return symMatrix[i*(i-1)/2 + j-1];} else {return symMatrix[j*(j-1)/2 + i-1];}
}
六、考研真题解析与实战演练
6.1 真题题型分类及解题策略
考研中数组与特殊矩阵相关题目主要分为以下四类,需掌握对应的解题方法:
1. 地址计算与压缩映射
题型特征:给定矩阵类型(如对称矩阵、三对角矩阵)及其存储方式(行优先/列优先),计算特定元素在压缩数组中的下标或物理地址。
解题关键:
- 明确矩阵类型对应的压缩公式(如下三角矩阵的公式与对称矩阵不同)
- 注意题目中数组下标起始位置(0或1)
- 区分行优先和列优先存储的计算差异
真题示例:
题目(2022年某校真题):
一个10阶对称矩阵A采用行优先压缩存储下三角(含对角线),求元素A[8][5]在压缩数组中的下标k。
解析:
根据对称矩阵压缩公式(行优先):
当i ≥ j时,k = i(i-1)/2 + j-1
代入i=8,j=5(注意题目中下标是否从1开始,若从0开始需调整):
k = 8×7/2 + 4 = 28 + 4 = 32
答案:32
2. 压缩存储结构设计
题型特征:要求根据矩阵特点选择合适的压缩存储方式,或设计压缩后的数据结构。
解题关键:
- 分析矩阵元素分布规律(如对称性、带状分布)
- 对比不同压缩方式的优缺点(如三元组表适合稀疏矩阵,十字链表支持动态操作)
真题示例:
题目(2021年某校真题):
设计一个三对角矩阵的压缩存储结构,并给出元素A[i][j]的存储位置计算公式。
解析:
三对角矩阵的非零元素集中在主对角线及其相邻两侧,采用行优先压缩存储。
每个元素A[i][j]在一维数组中的位置k为:
k = 2i + j - 3(假设下标从0开始)
验证:当i=1, j=1时,k=0;i=2, j=1时,k=2×2+1-3=2,符合带状分布规律
3. 存储空间优化分析
题型特征:计算压缩存储后的空间节省比例,或对比不同存储方式的空间复杂度。
解题关键:
- 原始矩阵空间:n×n×L(L为元素大小)
- 压缩后空间:根据压缩策略计算(如对称矩阵为n(n+1)/2×L)
真题示例:
题目(2020年某校真题):
一个100阶的下三角矩阵采用压缩存储,问节省了多少存储空间?
解析:
原始空间:100×100 = 10,000 单位
压缩后空间:100×101/2 = 5,050 单位
节省比例:(10,000 - 5,050)/10,000 = 49.5%
答案:节省49.5%空间
4. 算法设计与复杂度分析
题型特征:要求实现稀疏矩阵的转置、加法等操作,并分析时间复杂度。
解题关键:
- 利用三元组表或十字链表的结构特性
- 优化遍历顺序以减少时间复杂度
真题示例:
题目(2019年某校真题):
设计稀疏矩阵快速转置算法,说明其时间复杂度优于传统转置的原因。
解析:
算法步骤:
- 统计原矩阵每列非零元素个数,存入数组num[col]
- 计算转置后每行起始位置pos[row]
- 遍历原三元组表,按pos[row]填入转置矩阵
时间复杂度:O(n+t)(传统算法为O(t×n)),其中t为非零元素个数
6.2 高频易错题型解析
易错点1:混淆行优先与列优先公式
真题示例:
一个5×5矩阵按列优先存储,元素A[2][3]的物理地址为1000,每个元素占4字节,求A[4][1]的地址。
常见错误:错误使用行优先公式计算列优先地址。
正确解法:
列优先地址公式:LOC(A[i][j]) = LOC(A[0][0]) + (j×m + i) × L
已知A[2][3]地址为1000,代入求基地址:
1000 = LOC(A[0][0]) + (3×5 + 2) × 4 → LOC(A[0][0]) = 1000 - 68 = 932
计算A[4][1]地址:932 + (1×5 + 4) × 4 = 932 + 36 = 968
易错点2:三对角矩阵下标计算边界条件
真题示例:
一个三对角矩阵A[1…n][1…n]按行优先存储,求元素A[i][j]的压缩数组下标k。
常见错误:忽略|i-j| ≤1的条件导致错误映射。
正确解法:
k = 2i + j - 3(当1≤i,j≤n且|i-j|≤1)
若i=1, j=2,则k=2×1+2-3=1,验证正确
6.3 真题实战训练(附答案)
题目1(2023年某校真题):
一个稀疏矩阵的非零元素分布如下表所示,请用三元组表表示,并计算其压缩存储节省的空间比例(矩阵大小为20×20,非零元素占比3%)。
行 | 列 | 值 |
---|---|---|
2 | 5 | 8 |
3 | 7 | 4 |
… | … | … |
答案:
- 三元组表需存储行、列、值三个信息,总空间:3×t×L(t=20×20×3%=12)
- 原矩阵空间:20×20×L=400L
- 节省比例:(400L - 36L)/400L = 91%
题目2(2022年某校真题):
给定对称矩阵压缩存储的一维数组B,设计算法判断两个对称矩阵A和B是否相等。
答案:
bool isEqual(int B1[], int B2[], int n) {int total = n*(n+1)/2;for(int i=0; i<total; i++) {if(B1[i] != B2[i]) return false;}return true;
}
解析:对称矩阵压缩后只需比较下三角元素,时间复杂度O(n²/2)
七、总结与备考建议
- 核心公式必须熟练推导:如对称矩阵、三对角矩阵的压缩公式,需掌握数学归纳法的推导过程而非死记硬背。
- 真题训练侧重计算题:近5年考研中,70%的题目涉及地址计算或压缩映射,需反复练习典型例题。
- 稀疏矩阵结合算法设计:重点关注三元组表与十字链表的转换算法,以及时间复杂度的优化策略。
备考资料推荐:
- 《数据结构(C语言版)》严蔚敏:第5章数组与广义表
- 各校历年真题汇编(如河海大学、山东科技大学)
通过系统训练与真题解析,考生可显著提升解题效率,攻克数组与特殊矩阵的核心考点。