文章目录
- 1. 概念
- 2. 分类
- 无向图
- 有向图
- 循环图
- 连通图
- 3. 应用
- 4. 操作(CRUD)
- 5. 图常见的数据结构
- 邻接表
- 邻接矩阵
- 关联矩阵
- 关联矩阵与邻接矩阵
- 6. 内容出处
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. 应用
- 航班信息(例如:此刻只有A到B的单程票、或者B到A的单程票、或者A到B和B到A的票都有)–有向图
>2. 社交关系模型(例如:A和B互相认识、B和C互相认识、C和D互相认识等关系描述) – 无向图
- 交通网络模型 – 无向图
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. 内容出处
数据结构