数据结构--图(笔记)

1. 概念

① 图:在计算机科学中,图(英语:graph)是一种抽象数据类型,用于实现数学中图论的无向图和有向图的概念。-- wiki 图是一种表示关系的数据结构
(树:是一种表示层级的数据结构)

② 遍历一张图时需要同时考虑节点(V)和边(E),时间复杂度最坏的情况O(V+E),后续可以通过一些算法降低时间复杂度。
③ 关于图两个常见的遍历算法(最坏情况下时间复杂度都是O(V+E)):深度优先算法(dfs)、广度优先算法(bfs)。
③ 图中最短路径问题常用算法:Dijkstra算法(时间复杂度 O((V+E)logV))、bellman-ford算法(时间复杂度 O(VE))

2. 分类

补充说明:树是一种特殊的图(堆是一种特殊的树)

在这里插入图片描述
(上图来源:wiki)

无向图

在这里插入图片描述
无向图:两点之间仅仅是相互连接的关系,表示一种状态(例如:上述节点依次代表一个人abcde,表示a和b互相认识,b和c互相认识等等关系时就可以用无向图)

有向图

在这里插入图片描述
有向图:节点之间会有一种指向关系(例如:a喜欢b,b喜欢c,c和d互相喜欢)

循环图

要求:需要有三个及三个以上节点形成闭环
在这里插入图片描述
(上图节点之间的关系有向无向都行,即循环图是有向图无向图都行)
节点之间形成闭环的行为被称为:图的循环

连通图

在这里插入图片描述
判断图的连通性算法:并查集(也是一种树结构)、深度优先搜索(递归的方式)

3. 应用

  1. 航班信息(例如:此刻只有A到B的单程票、或者B到A的单程票、或者A到B和B到A的票都有)–有向图
    在这里插入图片描述>2. 社交关系模型(例如:A和B互相认识、B和C互相认识、C和D互相认识等关系描述) – 无向图
    在这里插入图片描述
  2. 交通网络模型 – 无向图
    在这里插入图片描述

4. 操作(CRUD)

操作重点:节点、方向(边或者弧)
实现方式:链表(邻接表)、二维数组(邻接矩阵)
在这里插入图片描述
(图片来源:wiki)

5. 图常见的数据结构

邻接表

        邻接表就是一种链表,用来存储每个节点的相邻节点信息(每个节点也都有一个与之对应的链表)。
在这里插入图片描述>在这里插入图片描述
                                                 (图片来源:wiki)
优点(链表的优势):① 节省空间:对于稀疏图,邻接表可以大大节省存储空间,因为它只存储实际存在的边。② 便于添加和删除边:在动态图的情况下,邻接表更容易进行边的添加和删除操作,时间复杂度相对较低。
应用场景:① 社交网络分析:社交网络通常是非常稀疏的图,每个人作为一个顶点,人与人之间的关系作为边。邻接表非常适合存储这种大规模稀疏图,可以高效地存储和处理社交网络中的人际关系。② 地理信息系统:在地理信息系统中,地图可以抽象为图,地点作为顶点,道路作为边。由于实际的地图中地点之间的连接相对较少,邻接表可以有效地存储地图信息,并且在进行路径规划等操作时,可以快速遍历相邻的地点。

邻接矩阵

在这里插入图片描述
在这里插入图片描述
                                                    (图片来源:wiki)
优点(数组的优势):① 直观:可以直接通过矩阵元素判断两个顶点之间是否有边相连,查询操作简单快速,时间复杂度为O(1) 。② 适合稠密图:当图比较稠密,即边的数量接近顶点数量的平方时,邻接矩阵不会浪费太多空间。
应用场景:① 网络流量分析:在计算机网络中,分析网络节点之间的流量关系时,如果节点之间的连接比较紧密,邻接矩阵可以方便地表示节点间的流量大小,快速查询任意两个节点之间的流量情况。② 有权图且边权变化少:如果图是带权图,且边的权重相对稳定,不经常变化,邻接矩阵可以方便地存储边的权重信息,便于快速查询和处理。

关联矩阵

关联矩阵:元素表示各个节点-边对是否相关在这里插入图片描述
                                              (图片来源:wiki)

关联矩阵与邻接矩阵

定义和元素含义:
① 关联矩阵:是一个n × m的矩阵,其中n是图的顶点数,m 是图的边数。矩阵中的元素表示顶点与边的关联关系。如果顶点 i 与边 j 相关联,则对应元素为特定值(通常为 1 或根据边的方向等有不同取值);若不相关联,则为 0。
② 邻接矩阵:是一个n × n的矩阵,其中n是图的顶点数。矩阵中的元素表示顶点之间的连接关系。如果顶点 i 与顶点 j 之间有边相连,则对应元素为特定值(如 1 或边的权重等);若没有边相连,则为 0。
存储信息:
① 关联矩阵:存储了每个顶点与每条边的关联情况,可以清晰地反映出图的结构细节,包括顶点与边的具体连接方式。对于有向图,可以区分边的起点和终点与顶点的关联关系。
② 邻接矩阵:主要存储顶点之间的直接连接关系,侧重于反映顶点之间的邻接状态。对于有向图,可以区分出边的方向。
适用场景:
① 关联矩阵:在电路分析中非常有用,能够清晰地表示电路中的节点和支路之间的关系,帮助分析电流、电压等;在研究图的生成树等问题时,可以通过关联矩阵的性质进行分析。
② 邻接矩阵:适用于需要快速判断两个顶点之间是否有直接连接的情况,查询操作时间复杂度为O(1)。在网络分析中,当关注网络中节点之间的直接交互关系时,邻接矩阵较为方便。

6. 内容出处

数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值