| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 考研数据结构与算法(七)图论 -> 正文阅读 |
|
[数据结构与算法]考研数据结构与算法(七)图论 |
一、图的基本概念1.1 图的定义
注意:图的顶点集 V V V 一定为非空,而图的边集 E E E 可能为空 1.2 基本术语1.2.1 有向图图中的边集是由方向的,例如有一个从点
A
A
A 到
B
B
B 的有向边,那么我们从
A
A
A 点可以到达
B
B
B 点,而不能从
B
B
B 点到达
A
A
A 点,这样就是一个有向边,在这条边中点
A
A
A 被称为 弧尾 ,而点
B
B
B 被称为 弧头 ,我们通常用这样的符号来记录这条边: 1.2.2 无向图很显然没有方向的边和顶点集构成的图就为无向图,按照上面的情况,在无向图中顶点之间是互相连通的,即若有一个点
A
A
A 到点
B
B
B 的边,从
B
B
B 出发也是能到达
A
A
A 点的,我们通常使用这样的符号来记录这条边: 1.2.3 简单图一个图 G G G 若满足:
1.2.4 多重图若图 G G G 中某两个结点之间的边数多于一条,又允许顶点通过同一条边也和自己关联,则 G G G 为多重图。多重图的定义和简单图是相对的 1.2.5 完全图
1.2.6 子图设有两个图 G = ( V , E ) G = (V,E) G=(V,E) 和 G ′ = ( V ′ , E ′ ) G'=(V',E') G′=(V′,E′), 若 V ′ V' V′是 V V V 的子集,且 E ′ E' E′是 E E E 的子集,则称 G ′ G' G′ 是 G G G 的子图,若满足 V ′ = V V' = V V′=V 且 E ′ ? E E' \subset E E′?E 那么子图 G ′ G' G′ 为 G G G 的生成子图 注意:并非 V V V 和 E E E 的任何子集都能构成 G G G 的子图,因为这样的子集可能不是图, 即 E E E 的子集中的某些边关联的顶点可能不在这个 V V V 的子集中 1.2.7 连通、连通分量、连通图关于连通方面的定义都是基于无向图的
很显然一个 n n n 个点的连通图最少有 n ? 1 n-1 n?1 条边(即后面提到的生成树),最多有 ( n ? 1 ) × n 2 \frac{(n-1)\times n}{2} 2(n?1)×n? 个边 这里再补一下 极小连通子图 的定义:一个顶点为 n n n 的子图的边数为 n ? 1 n-1 n?1 (其实后面也能知道这其实是生成树的定义) ,就称其为极小连通子图,很显然这样的子图也是一个极大连通子图,因为它是一个连通分量。 例如,对于下面的这个非连通图,其连通分量有三个: 1.2.8 强连通关于强连通方面的定义都是基于有向图的
例如,对于如下的非强连通图,其中点
A
A
A 和
B
B
B 构成的子图就为极大联通子图,即强连通分量,而点
C
C
C 和
D
D
D 构成的子图则不是强连通分量 1.2.9 生成树、森林生成树、森林一般是基于无向图的 连通图的生成树是包含图中全部顶点的一个极小连通子图,即一个 n n n 个点的连通图中有 n ? 1 n-1 n?1 条边 很显然这样的连通图,如果减去一条边就会形成非连通图,而若是加上一条边,则会形成回路 例如,下图中的连通图就为一个生成树: 而生成森林其实就是多个连通子图都是极小连通子图(生成树),那么就称这个森林为生成森林,例如下图中左边森林为生成森林,而右边的森林不是连通森林: 1.2.10 顶点的度
1.2.11 边权和网在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值。 这种边上带有权值的图称为带权图,也称网 。
1.2.12 稠密、稀疏图
一般来说当图 G G G 满足 ∣ E ∣ < ∣ V ∣ l o g 2 ∣ V ∣ |E| < |V|log_2|V| ∣E∣<∣V∣log2?∣V∣ 的时候,可以将图G定义为稀疏图,反之则为稠密图 1.2.13 路径、路径长度、回路
1.2.14 简单路径、简单回路
1.2.15 距离从顶点 u u u 出发到顶点 v v v 的最短路径若存在,则此路径的长度称为从 u u u 到 v v v 的距离 。 若从 u u u 到 ν ν ν 根本不存在路径,则记该距离为无穷 ( ∞ ) (∞) (∞) 1.2.16 有向树一个顶点的入度为 0 0 0 、其余顶点的入度均为 1 1 1 的有向图,称为有向树 二、图的存储结构2.1 邻接矩阵通过一个一维矩阵 V V V 存储顶点信息,然后再通过一个二维矩阵 A A A 存储边的信息 对于无权图 A [ i ] [ j ] A[i][j] A[i][j] 的含义如下: A [ i ] [ j ] = { 1 , 若 ( V i , V j ) 或者 < V i , V j > 是 E ( G ) 中的边 0 , 若 ( V i , V j ) 或者 < V i , V j > 不是 E ( G ) 中的边 A[i][j] = \begin{cases} 1 ,若(V_i,V_j)或者 <V_i,V_j>是E(G)中的边 \\ 0 ,若(V_i,V_j)或者 <V_i,V_j>不是E(G)中的边\\ \end{cases} A[i][j]={1,若(Vi?,Vj?)或者<Vi?,Vj?>是E(G)中的边0,若(Vi?,Vj?)或者<Vi?,Vj?>不是E(G)中的边? 对于有权图
A
[
i
]
[
j
]
A[i][j]
A[i][j] 的含义如下:
一些通过邻接矩阵存储的图的示例如下: 2.2 邻接表我们对图中每一个顶点建一个单链表,然后链表的元素就为其所连接的点,这样就能节省大量的空间,这样的邻接表中存在两种类型的结点:顶点结点、边表结点 无向图:
2.3 十字链表首先来说,十字链表是对于有向图而言的,有一点邻接表和邻接矩阵结合的感觉,首先对于每一个顶点来说有一个顶点结点的概念,然后对于其指向的边结点有一个弧结点的概念
例如如下有向图构建的十字链表: 注意:上图中的弧结点没有 2.4 邻接多重链表邻接多重表是无向图的另一种链式存储结构,着重于边与边以及边与点的关系,与十字链表类似,邻接多重表也有顶点结点以及边结点
下面是一些绘制邻接多重表的步骤:
三、图的遍历方法也可参见我的另一篇介绍:https://acmer.blog.csdn.net/article/details/122310835 3.1 广度优先搜索(BFS)图的广度优先搜索类似于树的层序遍历,不断地将未访问的结点放入队列,然后出队,再将出队元素所连接的所有未访问点放入队列,这个当队列为空的时候,我们就完成了图的广度优先搜索,简单的搜索如下:
当然另一个 B F S BFS BFS 的例子是求解单源最短路问题,用的是一个以 1 1 1 为源点,然后求得是到 n n n 的最短距离(当然边权都为 1 1 1 )
我们来分析 B F S BFS BFS 的时间和空间复杂度
3.2 深度优先搜索(DFS)D F S DFS DFS 即优先深度搜索,可能会从一个点开始往一个方向一直往下搜,然后搜到尽头后就回溯,直到当前连通块的所有的结点全都被搜索过,就停止递归搜索,一般来说 D F S DFS DFS 的代码都会十分简洁,但是常数耗时会非常大
我们可以明显看出 D F S DFS DFS 的代码较为简洁,我们来分析一下 D F S DFS DFS 的时间复杂度
四、图的基本应用4.1 最小生成树最小生成树算法在我另一篇博客有较为详细的讲解: 4.2 最短路径最短路径算法在我另一篇博客有较为详细的讲解:(包括Floyd、bellman、SPFA、Dijkstra) https://acmer.blog.csdn.net/article/details/123040285 4.3 有向无环图描述表达式有向无环图:字面意思一个不存在环的有向图,简称
D
A
G
DAG
DAG 图 还是先画出这个表达式的二叉树结构
4.4 拓扑排序拓扑排序算法在我另一篇博客有较为详细的讲解: 4.5 关键路径关键路径算法在我另一篇博客有较为详细的讲解: 五、错题选择题
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:33:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |