《考研408数据结构》第三章3(数组矩阵)复习笔记

一、一维数组寻找第[i]位元素的地址

  • 已知【起始地址】、【数组每个元素的空间大小:sizeof(ElemType)】,问【第i个元素】在哪个位置
  • 那不就是简单加减乘除:【起始位置】+【第 i 个元素空间地址】×【每1个占多少空间】
  • 只不过要注意数组下标索引开始是0?还是1?

二、二维数组寻找第[i]位元素的地址

1、按【行优先】存储

如图所示,那么公式很简单:

  • 等于:【起始位】+(【第 0 ~ i 行,这些行的所有元素】+【第 j 个元素】)× 【每个空间占多大】
  • 等于:【起始位】+(【第 i 行】×【每1行有多少个元素】+【第 j 列】)× 【每个空间占多大】
    • 注意:
      • 为什么**【** 第 0 ~ i 行的所有元素**】不是** 【第 i-1 行】×【每1行有多少个元素】
        • 因为数组一般从0开始,所以 i 相当于就是第 "n-1" 行
      • 为什么**【第 j 个元素】是** 加【第 j 列】,而不是 加【第 j 列】
        • 因为 j 也是从0开始的,而且求得起始地址是指这个元素 "头" 而不是 "尾",正如图中蓝色箭头

2、按【列优先】

反过来就行了:

  • 等于:【起始位】+(【第 0 ~ j 列,这些列的所有元素】+【第 i 个元素】)× 【每个空间占多大】
  • 等于:【起始位】+(【第 j 列】×【每1列有多少个元素】+【第 i 行】)× 【每个空间占多大】

【例题】

三、特殊矩阵 和 数组 之间关系

学过线性代数的应该知道,一个矩阵其实就是一个二维数组,型状结构是刚好可以一一对应存储的。然后有些特殊矩阵因为可以取一半的数据来推算另一半,所以可以用于压缩文件,只存一半就行了。

1、对称矩阵

特性:

  • 1、必须是【n × n】的方阵
  • 2、关于主对角线,上三角区的每个元素的标号【i>j】,下三角区的每个元素标号【i<j】
  • 3、关于主对角线,斜着对称的两个元素【aij】=【aji】
    • 所以就只用存放【下三角 + 主对角线】元素、或者只存【上三角 + 主对角线】元素,这就成功压缩了数据;然后解压的时候,根据【aij】=【aji】来推算另一半数据就行了

1)对称矩阵至少要存多少个元素?(可记公式)

记住图中的等差数列求和公式即可,也不用管下标起始0还是1,因为求得是总个数

2)矩阵元素aij ------> 对应的数组的下标位置(前提:存放按【行】优先)

若只存【下三角 + 主对角线】(【i >= j】)

注意:这里矩阵下标是从1开始,数组是从0开始

公式意思是:

  • 前【0 ~ (i-1)】行所有元素之和**+ 第 i 行的第 j 个元素**
  • 记得上面公式求得是【是数组里第几个元素空间】,如果【求下标】还得【-1】
  • 千万别背公式,只用看懂推算逻辑,考试做题时自己画图推算
    存【上三角 + 主对角线】(【i <= j】)

注意:这里矩阵下标是从1开始,数组是从0开始

公式意思是:

  • 既然 aij = aji
  • 那么让直接换成【aji】机算,此时 i<=j 情况下,又变回了【下三角】
  • 然后注意!!!!!
    • 换成下三角计算的时候,不能因为【i】和【j】颠倒了,所以****不能再用【行优先】
    • 【牢记】:【上三角按 "行" 优先】=【下三角按 "列" 优先】
    • 具体【按 "列" 优先】怎么算看下面!!!
  • 千万别背公式,只用看懂推算逻辑,考试做题时自己画图推算

3)如果按【列】优先,aij 和 数组 映射关系又怎么算?

有点抽象,先看图理解,究竟是怎么存放的

注意:这里矩阵下标是从1开始,数组是从0开始

  • 然后看【下三角每一列 有几个元素】怎么算:
    • 【这列尾元素】-【这列首元素】+【1】
  • 然后看【下三角第 j 列中,aᵢⱼ 前面有几个元素】:
    • 其实依旧是和上面一样,【这列第 i 个元素】-【这列首元素】+【1】
  • 最后结合一下,【前 j-1 列的总数】+【第 j 列 aᵢⱼ 前面有几个元素】
    • 【前 j-1 列的总数】把等差数列求和:(j-1)(2n - j + 2) / 2
    • 【第 j 列 aᵢⱼ 前面有几个元素】:i - j + 1
    • 合起来共有这么多个元素:【(j-1)(2n - j + 2) / 2】****+【i - j + 1】
    • 换成数组下标的话就-1:【(j-1)(2n - j + 2) / 2】+【i - j 】
      • 千万别背公式,只用看懂推算逻辑,考试做题时自己画图推算

【例题】

例题1:注意这个矩阵的下标也是从0开始的!!!!

例题2:上一题的变式,如果换成【按列优先】存储的话

例题3:

例题4:变条件换成【对称压缩矩阵】,存下三角(i >= j)

例题5

例题6:上题变一下条件?没那么简单的差值可以直接加减了怎么算?

例题7:上三角计算!!!!很容易错!!!!

例题8:一定要做多几次!!!!!!超级超级超级容易错!!!!!!!!!!!!!!!!!!

2、三角矩阵

特征:

  • 就是除了【上三角 + 主对角】或【下三角 + 主对角】,其他位置都是一样的数
  • 那么这些一样的数,就单独在数组最后面【开辟1个空间存】就够了

对应的【元素个数】、【映射关系】

  • 这还不简单,在上面对称矩阵的基础上:
    • 【上或下三角总数 + 尾部1个元素存其他值】
    • 映射关系也是一样的,其他一样的值的区域值存最后一位就行了。。。不多说了

【例题】

3、三对角矩阵(带状矩阵)

特征:

  • 1、标准表述就是:看下标那,若 | i - j | > 1 时,aij=0
  • 2、直观人话就是 "主对角那附近三条斜线" 非零,其他地方元素都是0
    • 那不是只用存 "主对角那附近三条斜线" 那一坨非零元素就行了吗

对应的【元素个数】、【映射关系】

【元素个数】:

  • 很简单,如图所示

【映射关系】

  • 不好用简单的话解释。。。真没招了自己看图理解吧,我也不知道为啥这么巧妙
  • 反正你就记住:
    • 【(不止1行的)前 i-1 行元素总数】+【(中间行)aij 是 第i行第几个元素】
    • 下标是在这个基础上-1
    • 【另外】!!!如果实在不理解【j - i + 2】我们也可以猜【aij 是 第i行第几个元素】
      • 我问你,下标从1开始的,A[23][24]是【这行里:3个要存的非零数】里的【第几个】?------------>A[23][23]是主对角元素,第23行第2个,so........
      • A[999][998]是【这行里:3个要存的非零数】里的【第几个】?------------>A[999][999]是主对角元素,第999行第2个,so........

【例题】

4、稀疏矩阵

特征:如图所示

稀疏矩阵的考点:【怎么存储的2种形式(很简单)】

第一种:【三元组】

  • 存3个值:【行】、【列】、【值】
  • 然后记住:他不能【随机存取】

第二种:【十字链表法】

  • 一个元素节点会连【它这一行的下一非零元素】和【它这一列下一非零元素】

【例题】

相关推荐
Fcy6482 小时前
算法竞赛有关数据结构的补充(3)—— 二叉树、堆和哈希表的静态实现(包括红黑树和AVL树动态实现)
数据结构·算法·散列表
代码探秘者2 小时前
【算法篇】6.分治
java·数据结构·后端·python·算法·排序算法
岑梓铭2 小时前
《考研408数据结构》第三章2(栈、队列应用)复习笔记
数据结构·笔记
计算机安禾2 小时前
【数据结构与算法】第8篇:线性表(四):双向链表与循环链表
c语言·开发语言·数据结构·c++·算法·链表·visual studio
wangchunting2 小时前
数据结构-线性数据结构
java·开发语言·数据结构
程序员夏末12 小时前
【LeetCode | 第七篇】算法笔记
笔记·算法·leetcode
开源盛世!!13 小时前
3.23-3.25笔记
笔记
TK云大师-KK13 小时前
TikTok自动化直播遇到内容重复问题?这套技术方案了解一下
大数据·运维·人工智能·矩阵·自动化·新媒体运营·流量运营
ryrhhhh14 小时前
多平台同步优化技术:矩阵跃动小陌GEO如何实现一次配置、全端搜索曝光
人工智能·线性代数·矩阵