跳转至

16-图-拓扑排序

• Topological Sorting

==== 1,概述 拓扑排序主要用于从作业之间的给定依赖关系中调度作业【==找到做事情的顺序==】

有向无环图的拓扑排序(DAG)是顶点的线性排序,对于每一条有向边uv,顶点u在顺序在v之前。

如果图不是DAG,则不能对图进行拓扑排序。 拓扑排序当且仅当图是一==个有向无环图时==才可以排序

2,有向图 有向图可以用来表示一组事件中的优先级

image1

fact: 如果G包含一个循环,则无法找到所需的顺序•(通过矛盾来证明) 然而,如果G是无环的(不包含循环),我们将给出两种算法,它们总是能找到所需的排序 案例

有向无环图directed acyclic graph. image2

image3

寻找拓扑排序数量 | 1,写入每个顶点的入度,删除当前入度最小的点,更新各点入度 | |-----------------------------------------------------------|

Problem01 找到给定图可能的不同拓扑顺序的数量 image4

上图的拓扑顺序的步骤如下。 image5

案例2 考虑一下下面给出的有向图。以下哪些说法为真 image6 1.该图没有任何拓扑顺序。【错,】 2.PQRS和SRPQ都是拓扑顺序。【】 3.PSRQ和SPRQ都是拓扑顺序。 4.PSRQ是唯一的拓扑顺序。 解决:3正确 1,给定的图是一个有向无环图。因此,拓扑顺序的存在。 2,根据拓扑排序的定义,P和S必须以拓扑顺序出现在R和Q之前。 image7

案例3 请考虑下面的有向图。 image8 先删去A,有B,D两种情况, 从B入手,删B,有C,D两种情况,删C,得到==结果1==,删D,有C,E两种情况,得到结果2,结果3 从D入手,删D,有B,E两种情况,删E,得到结果4,删B,有C,E两种情况,得到结果5,结果6

我们介绍了有向无环图(DAG)上的拓扑排序问题

我们给出了两种线性时间算法: • (1) Using Queue • (2) Using Stack

1,Using Queue Example of Topological Sort (with Queue) 思路:存入度=0的

image9

Example of Topological Sort - 2

image10

image11 4,Topological Sort (with Queue) image12 Topological Sort (Example) image13 二、Topological Sort (with Stack) 1,Topological Sort (with Stack) 1.在图上使用==DFS==

2.按顶点结束时间的递减顺序排列的输出顶点;==(其完成时间的递减顺序==) 2, • (check time, finishing time) image14

Topological Sort (with Stack)

image15

Topological Sort (Example) 在可能的DFS后的发现和完成时间 image16

时间完成时间(按降序排列) 如果我们从左到右排序事件,边缘方向有什么特别之处吗?

image17

Performance 设G=(V、E)为输入有向图 拓扑排序的运行时间: 1.执行DFS:O(|V|+|E|)时间

2.排序完成时间

image18

Total time: O(|V|+|E|)

案例

然后我们按节点顺序遍历这个图

0-5这个顺序

首先dfs的是0这个点

dfs进去发现他没有子节点

也就是没有从0这个点出发可以到达的点

然后把0添加到栈里面

然后dfs的是1这个点

1这个点和0同理,没有子节点,然后把1添加到栈里面

然后遍历2

2有一个子节点3

所以我们先把visit2设为true,然后dfs 3这个节点

visit代表这个点已经访问过了

3到1

但是1已经访问过了,所以结束当前的dfs

同时把3放进栈里面

再把2放进栈里

这样我们栈里面,就是 0 1 3 2

0在栈底

这样2这个节点就算是深搜完了

然后深搜3

但是3已经访问过了,直接跳过

然后4,发现4的两个子节点0和1也已经访问过了

然后栈是后进先出的原理

倒过来正好就是拓扑的顺序

![image19](../../assets/0ea2dcea512c43ac83d75fc66ada9b04.png)

![image20](../../assets/b0b329a473d34f2cb1950111b5e8a8a8.png)

![image21](../../assets/6f3efaa657a54ff48e44367a1ce35e61.png)

image22

image23