您的位置:首页 > 财经 > 金融 > 兰州疫情到底有多么严重_新站整站排名优化火速公司_上海推广seo_上海seo优化bwyseo

兰州疫情到底有多么严重_新站整站排名优化火速公司_上海推广seo_上海seo优化bwyseo

2025/4/15 22:51:49 来源:https://blog.csdn.net/m0_73283053/article/details/147197099  浏览:    关键词:兰州疫情到底有多么严重_新站整站排名优化火速公司_上海推广seo_上海seo优化bwyseo
兰州疫情到底有多么严重_新站整站排名优化火速公司_上海推广seo_上海seo优化bwyseo

考研数据结构精讲:数组与特殊矩阵的压缩存储技巧

一、数组基础概念

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;

三、应用场景对比

存储方式适用场景优点缺点
二维数组稠密矩阵访问速度快空间利用率低
对称矩阵压缩对称矩阵节省近一半空间仅适用于对称矩阵
三对角压缩带状矩阵高效存储带状数据不适用随机分布数据
三元组表稀疏矩阵灵活存储矩阵运算效率低
十字链表频繁修改的稀疏矩阵动态操作方便结构复杂

四、考研重点题型

  1. 地址计算:给定存储方式,计算特定元素的存储地址
  2. 压缩映射:将特殊矩阵元素映射到压缩数组的对应位置
  3. 结构设计:根据场景选择合适压缩存储方式
  4. 算法实现:稀疏矩阵转置、加法等操作实现

五、实战演练(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年某校真题)
设计稀疏矩阵快速转置算法,说明其时间复杂度优于传统转置的原因。
解析
算法步骤

  1. 统计原矩阵每列非零元素个数,存入数组num[col]
  2. 计算转置后每行起始位置pos[row]
  3. 遍历原三元组表,按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%)。

258
374

答案

  • 三元组表需存储行、列、值三个信息,总空间: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)


七、总结与备考建议

  1. 核心公式必须熟练推导:如对称矩阵、三对角矩阵的压缩公式,需掌握数学归纳法的推导过程而非死记硬背。
  2. 真题训练侧重计算题:近5年考研中,70%的题目涉及地址计算或压缩映射,需反复练习典型例题。
  3. 稀疏矩阵结合算法设计:重点关注三元组表与十字链表的转换算法,以及时间复杂度的优化策略。

备考资料推荐

  • 《数据结构(C语言版)》严蔚敏:第5章数组与广义表
  • 各校历年真题汇编(如河海大学、山东科技大学)

通过系统训练与真题解析,考生可显著提升解题效率,攻克数组与特殊矩阵的核心考点。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com