数据结构历年考研真题对应知识点(数组和特殊矩阵)

目录

3.4数组和特殊矩阵

3.4.2数组的存储结构

【二维数组按行优先存储的下标对应关系(2021)】

3.4.3特殊矩阵的压缩存储

【对称矩阵压缩存储的下标对应关系(2018、2020)】

【上三角矩阵采用行优先存储的应用(2011)】

【三对角矩阵压缩存储的下标对应关系(2016)】

3.4.4稀疏矩阵

【存储稀疏矩阵需要保存的信息(2023)】

【适合稀疏矩阵压缩存储的存储结构(2017)】


3.4数组和特殊矩阵

3.4.2数组的存储结构

【二维数组按行优先存储的下标对应关系(2021)】

对于多维数组,有两种映射方法:按行优先和按列优先

以二维数组为例,按行优先存储的基本思想是:先行后列,先存储行号较小的元素,行号相等先存储列号较小的元素。

设二维数组的行下标与列下标的范围分别为[0,h1]与[0,h2],则存储结构关系式为:

例如,对于数组 A[2][3],它按行优先方式在内存中的存储形式如图 3.18所示。

当以列优先方式存储时,得出存储结构关系式为:

例如,对于数组 A[2][3],它按列优先方式在内存中的存储形式如图 3.19所示。

3.4.3特殊矩阵的压缩存储

【对称矩阵压缩存储的下标对应关系(2018、2020)】

若对一个 n阶矩阵 A 中的任意一个元素 a ᵢ,ⱼ都有 a ᵢ,ⱼ = a ⱼ,ᵢ (1<=i,j<=n),则称其为对称矩阵。其中的元素可以划分为3个部分,即上三角区、主对角线和下三角区。

对于n阶对称矩阵,上三角区的所有元素和下三角区的对应元素相同,若仍采用二维数组存放,则会浪费几乎一半的空间,为此将n阶对称矩阵A存放在一维数组B[n(n+1)/2]中,即元素aᵢ,ⱼ,存放在bₖ以中。比如只存放下三角部分(含主对角)的元素。

在数组B中,位于元素aᵢ,ⱼ (i=>j)前面的元素个数为

第1行:1个元素(a₁,₁)。

第2行:2个元素(a₂,₁,a₂,₂)。

. . . . . .

第i-1行:i-1个元素(aᵢ-₁,₁, aᵢ-₁,₂,...,aᵢ-₁ ,ᵢ-₁ )。

第i行:j-1个元素(aᵢ,₁,aᵢ,₂,...,aᵢ,ⱼ-₁)。

因此,元素aᵢ,ⱼ 在数组B中的下标k=1+2+...+(i-1)+j-1=i(i-1)/2+j-1(数组下标从 0开始)。

因此,元素下标之间的对应关系如下:

注意:

二维数组 A[n] [n](行列都是n个元素)和 A[0..n-1] [0..n-1](行列都是n个元素)的写法是等价的。若数组写为 A[1..n][1..n],则说明指定了从下标 1开始存储元素。二维数组元素写为 a[i][j],注意数组元素下标i和j通常是从0开始的矩阵元素 通常写为 ai,j或 a(i)(j),注意行号i和列号j是从1开始的

【上三角矩阵采用行优先存储的应用(2011)】

上三角矩阵[见图 3.22(b)]中,下三角区的所有元素均为同一常量。只需存储主对角线、上三角区上的元素和下三角区的常量一次,可将其压缩存储在B[n(n+1)/2+1]中。

在数组B中,位于元素aᵢ,ⱼ (i<=j)前面的元素个数为:

第1行:n个元素

第2行:n-1个元素

. . . . . .

第i-1行:n-i+2个元素

第i行:j-i个元素

因此,元素 aᵢ,ⱼ 在数组B中的下标

k=n+( n-1 )+...+( n-i+2 )+( j-i+1 )-1=( i-1 )( 2n-i +2 )/2+( j-i )

因此,元素下标之间的对应关系如下:

上三角矩阵在内存中的压缩存储形式如图所示。

以上推导均假设数组的下标从0开始,若题设有具体要求,则应该灵活应对

【三对角矩阵压缩存储的下标对应关系(2016)】

由此可以计算矩阵A中3条对角线上的元素aᵢ,ⱼ(1≤i,j≤n,|i-j|≤1)在一维数组B中存放的下标为k=2i+j-3。

反之,若已知三对角矩阵中的某个元素aᵢ,ⱼ存放在一维数组B的第k个位置,则有i=[(k+ 1)/3+1],j=k-2i+3。

例如:

当k=0时,i=[(0+1)/3+1]=1,j=0-2x1+3=1,存放的是a₁,₁;

当k=2时,i=[(2+1)/3+1]=2,j=2-2x2+3=1,存放的是a₂,₁ ;

当k=4时,i=[(4+1)/3+1]=2,j=4-2x2+3=3,存放的是a₂,₃。

3.4.4稀疏矩阵

【存储稀疏矩阵需要保存的信息(2023)】

若采用常规的方法存储稀疏矩阵,则相当浪费存储空间,因此仅存储非零元素。但通常非零元素的分布没有规律,所以仅存储非零元素的值是不够的,还要存储它所在的行和列。因此,将非零元素及其相应的行和列构成一个三元组(行标i,列标j,值aᵢ,ⱼ ),如图 3.26 所示。然后按照某种规律存储这些三元组线性表。稀疏矩阵压缩存储后便失去了随机存取特性

【适合稀疏矩阵压缩存储的存储结构(2017)】

稀疏矩阵的三元组表既可以采用数组存储,又可以采用十字链表存储(见6.2节后续讲解)。当存储稀疏矩阵时,不仅要保存三元组表,而且要保存稀疏矩阵的行数、列数和非零元素的个数。

相关推荐
2601_957787588 小时前
短视频矩阵系统的信号密码:用数字信号处理(DSP)理论,破解“限流“的底层逻辑
矩阵·音视频·信号处理
纽扣6678 小时前
【算法进阶之路】链表终极进阶:合并 K 个有序链表 + 复制带随机指针的链表(含双解法)
数据结构·算法·链表
05候补工程师8 小时前
【考研英语一·翻译专攻】长难句翻译的“分治策略”:从底层拆分到逻辑重构(1997-2010真题高频陷阱与红笔纠偏)
经验分享·笔记·考研·重构
oo哦哦9 小时前
2026年实体门店获客新变局:当短视频矩阵成为“必修课“,哪套系统真正能落地?
线性代数·矩阵
迈巴赫车主9 小时前
码蹄集 MC0457符咒封印java
java·数据结构·算法
摇滚侠9 小时前
Java 零基础全套教程,数据结构与集合源码,笔记 168-174
java·数据结构·笔记
南境十里·墨染春水9 小时前
数据结构——队列
数据结构
专注API从业者10 小时前
用 Open Claw + 淘宝商品接口,快速实现电商商品监控与智能选品(附完整代码)
大数据·前端·数据结构·数据库
Shadow(⊙o⊙)10 小时前
前缀和:和可被K整除的子数组(normal)
数据结构·c++·算法
世纪末的小黑10 小时前
【LeetCode自用】LeetCode自用记录贴,题目一:两数之和
数据结构·算法·leetcode