这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
数据结构---图
描述
图是由[节点(Node)]通过[边(Edge)]相连组成的集合,用以表示实体之间的关系。图可以用
来建模社交网络、计算机网络、交通网络等。图包
含[顶点(节点)]和[边(节点之间的连接)]。图可以是[有向的]也可以是[无向的],并且
可以[包含环]或者是[无环的]。图的遍历算法包括[广度优先搜索]和[深度优先搜索]。
图的术语
- 顶点: 顶点
- 边:顶点之间的连接线称为边。
- 路径:从一个顶点到另一个顶点之间经过的所有顶点的描述
- 路径长度:路劲上对单元路线的计量。
- 环:起点和终点为同一个顶点的路径。
- 负权环:在「加权图」中,如果一个环的所有边的权重加起来为负数,我们就称之为
「负权环」。
- 连通性:两个不同顶点之间存在至少一条路径,则称这两个顶点是连通的。
- 顶点的度:「度」适用于无向图,指的是和该顶点相连接的所有边数称为顶点的度。
- 顶点的入度:「入度」适用于有向图,一个顶点的入度为 𝑑 d,则表示有 𝑑 d 条与
顶点相连的边指向该顶点。
- 顶点的出度:「出度」适用于有向图,它与「入度」相反。一个顶点的出度为 𝑑 d,
则表示有 𝑑 d 条与顶点相连的边以该顶点为起点。
图的分类
- 无向图: 边的两个节点是没有顺序关系的, A-B 和 B-A 是一条边
- 有向图: 边的两个节点是有顺序关系的, A->B 和 B->A 是不同的
- 加权图: 图中的每条边带有一个权重的参数
图的相关算法
- 并查集( Union Find )数据结构
- 「图」的深度优先搜索算法
- 「图」的广度优先搜索算法
- 最小生成树相关定理和算法
- 单源最短路径相关算法
- Dijkstra 算法
- Bellman-Ford 算法
- 拓扑排序之 Kahn 算法
1 - 图的表示方法
描述
邻接矩阵
用一个二维矩阵来存储两个节点之间的状态
缺点: 面对稀疏图时,有很多空间没有储存有效信息
- 确定邻接至或邻接于一个给定节点的集合需要用时 \(\Theta{(n)}\), 增加或删除一条
边仅需要 \(\Theta{(1)}\)
邻接链表
只考虑那些有连边的点对
对一个有 n 个点的图, 可以用 n 个链表, 第 i 个链表中存着从 i 直接连接的点
链式前向星表示的图
链式前向星(也称为邻接表的一种变种)是一种用于存储图的数据结构,它结合了数组和链表的优点,既节省空间又方便使用。在链式前向星中,每个节点的边不是直接存储在一个链表中,而是通过一个数组来存储所有边的信息,同时使用两个辅助数组来记录每条边的起点以及下一条边的位置。
2 - 图的深度优先搜索算法
描述
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。
DFS 的基本思想是从一个初始节点开始,尽可能[深入地探索]其子节点,直到无法继续深入
为止,然后回溯到上一个节点,继续探索其他未访问过的分支。这种策略类似
于[树的先序遍历] 。
DFS 的基本步骤
- 选择一个其实节点: 选择图中的任意一个节点作为起始节点
- 标记节点为已访问: 将当前节点标记为已访问,避免重复访问
- 递归访问相邻节点: 对于当前节点的每一个未访问过的相邻节点,递归地执行 DFS
- 回溯: 当当前节点的所有相邻节点都被访问过之后,回溯到上一个节点,继续访问
其他未访问过的分支
3 - 图的广度优先搜索算法
描述
广度优先搜索(Breadth-First Search,简称 BFS)是一种用于遍历或搜索树或图的算法。
这种算法从根节点开始,然后遍历所有[相邻的]节点,之后对于每一个相邻的节点,再遍历
它们未访问过的相邻节点,依次类推,直到所有的节点都被访问过为止。BFS 是一种逐层扩
展节点的搜索策略,即先搜索离起始节点最近的所有节点,然后再搜索下一层的节点。
BFS 的基本步骤
- 初始化:选择一个起始节点,将其标记为已访问,并放入队列中。
- 处理队列中的节点:
- 从队列中移除第一个节点。
- 对于这个节点,访问它所有的邻接点。如果某个邻接点没有被访问过,则标记这个邻
接点为已访问,并将其添加到队列的末尾。
- loop[2],直到队列为空。
在实际操作中,为了防止重复访问同一个节点,通常需要使用一个数据结构来记录已经访
问过的节点。此外,队列是实现 BFS 的关键数据结构,因为它是先进先出(FIFO)的数
据结构,能够确保节点按照其被发现的顺序被处理。
4 - 最小生成树
描述
生成树(Spanning Tree)是[图论]中的一个重要概念,尤其在处理连通图时非常有用。生
成树是指一个[无向图]的一个子图,它是一个包含图中所有顶点的树。也就是说,生成树是
一棵包含了原图中所有节点的[无环连通子图]
最小生成树
最小生成树(Minimum Spanning Tree, MST)是图论中的一个基本概念,特别是在处理加权
无向图时非常重要。给定一个加权无向图,最小生成树是指该图的一个生成树,其中所有边
的权重之和是最小的。这意味着,在保证所有节点连通的情况下,最小生成树选取的边的总
成本最低