数据结构(6.2_1)——领接矩阵法

图的存储------邻接矩阵法

邻接矩阵(Adjacency Matrix)是一种使用二维数组来表示图的方法。在这种表示法中,矩阵的行和列都对应图的顶点。

特点
  • 对于无向图,如果顶点i与顶点j之间有边,则矩阵的第i行第j列(记作matrix[i][j])和第j行第i列的元素值为1(或者边的权重),否则为0。
  • 对于有向图,如果存在一条从顶点i到顶点j的边,则matrix[i][j]为1(或有向边的权重),否则为0。有向图的邻接矩阵一般不是对称的。
  • 邻接矩阵适用于稠密图(边数接近顶点数平方的图)。
表示
  • 设图G有V个顶点,则邻接矩阵是一个V x V的矩阵。
  • 对于无权图,matrix[i][j]可以是0或1。
  • 对于带权图,matrix[i][j]可以是权重值,如果没有直接连接的边,则可以是无穷大或者一个特殊标记(比如null或者Infinity)。
优点
  • 简单直观。
  • 判断两个顶点之间是否存在边的时间复杂度为O(1)。
  • 适用于快速查找两个顶点之间的边或计算顶点的度(对于无向图)。
缺点
  • 如果图比较稀疏,则空间效率低下,因为很多位置都存储了0。
  • 添加或删除顶点时,需要重新分配整个矩阵,成本较高。

如何求顶点的度、入度、出度

无向图:

第i个结点的度=第 i 行(或第i列)的非零元素个数

时间复杂度=O(n)

有向图:

第i个结点的出度=第 i 行的非零元素个数

第i个结点的入度=第 i 列的非零元素个数

第i个结点的度=第 i 行、第i列的非零元素个数之和

邻接矩阵法存储带权图(网)

带权图(网)是指图中每条边都有一个与之相关的权重。在邻接矩阵法中,带权图的存储可以通过将邻接矩阵中的元素设置为边的权重来表示。以下是带权图(网)使用邻接矩阵存储的详细说明。

特点

  • 对于带权图,如果顶点i与顶点j之间有边,则邻接矩阵的第i行第j列(记作matrix[i][j])的元素值为该边的权重。
  • 如果顶点i与顶点j之间没有边,则matrix[i][j]的元素值可以设置为无穷大(或者一个足够大的数,表示两个顶点之间没有直接连接)。
  • 对于无向带权图,邻接矩阵是对称的,因为边(i, j)和边(j, i)的权重是相同的。
  • 对于有向带权图,邻接矩阵不一定对称,因为边(i, j)的权重可以与边(j, i)的权重不同。

若出现0或∞则代表不存在边

  • 方便地表示了边的权重。
  • 快速查找两个顶点之间的边的权重,时间复杂度为O(1)。
  • 便于计算最短路径等算法。

缺点

  • 对于稀疏图,空间效率不高,因为大多数元素都是无穷大,表示没有边。
  • 添加或删除顶点时,需要重新分配整个矩阵。

邻接矩阵的性能分析

空间复杂度:O(|V|^2)------只和顶点数相关,和实际的边数无关

适合存储稠密图

无向图的领接矩阵是对称矩阵,可以压缩存储(只存储上三角区/下三角区)

领接矩阵法的性质

总结:

相关推荐
Nil2087 小时前
leetcode 49字母异位分组
算法·leetcode·哈希算法
weixin_307779137 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
行者全栈架构师7 小时前
【鸿蒙心迹】让应用“悬浮“起来——闪控球(floatingBall)从接入到实战全链路(HarmonyOS 7.x)
前端·算法·架构
云的雨 雨的云7 小时前
手写算法动画上位机:从排序到线性代数可视化
线性代数·算法
Pniubi7 小时前
快速排序(力扣基础)(递归)
java·数据结构·算法
roman_日积跬步-终至千里8 小时前
【数据Agent论文·分析与报告评测|27】ComInsight:原子洞察正确,组合后的结论就可靠吗?
人工智能·算法·机器学习·数据分析
goujunwe8 小时前
保险 GEO 信源矩阵搭建:代理人轻量化分层信源,构建 AI 认可的交叉佐证网络
人工智能·线性代数·矩阵
Samson Bruce8 小时前
【数学之美】
线性代数·算法·概率论
Mister Leon9 小时前
Nvidia Orin AGX实战之从量化到蒸馏:在 Orin 上落地的大模型压缩实战
人工智能·算法·机器学习
aqiu1111119 小时前
蓝桥杯真题复盘:Fibonacci 数列与黄金分割(C++ 算法详解)
c++·算法·蓝桥杯