绪论
我们前面介绍了图的遍历和最小生成树,这一章节介绍图中的另一个重要知识点——拓扑排序。有关拓扑排序,我们不应该仅限于了解拓扑排序的算法,还应该了解拓扑排序的背景(为了解决什么样的问题),拓扑排序有关的数学(图论)知识,算法的运行过程,算法的运行时,拓扑排序另外的应用。
第十八章应该是贪心算法,但我个人认为应该先把图上的知识点先介绍完全,所以将顺序调换了一下。
Motivation
拓扑排序起源于现实中的工程(活动)问题:假设存在若干个工程(活动)希望完成,但是某些工程需要在另外一些工程完成的基础上才能开始进行,工程之间的这种关系我们称为依赖关系(dependency)。
一个工程对另一个工程的依赖构成偏序关系,偏序关系可以看作结点到结点的有向边,于是上述的工程问题可以构成一个有向图。两个结点至多只需要存在一条边,并且对于若干个能够全部完全的工程,不应该存在对于两个工程互相依赖的情况,转化有向图中即不同时存在结点A到结点B和结点B到结点A的路径,即不存在环。
综上,能够全部完成的工程问题构成有向无环图(DAG)。

良好的工程问题形成的DAG如下:


本文介绍了图论中的拓扑排序概念及其在工程问题中的应用。拓扑排序是一种解决工程依赖关系的算法,确保工程按正确顺序完成。文章详细阐述了拓扑排序的动机、关键引理、实现以及如何找到关键路径。拓扑排序可以使用队列或栈作为数据结构,其时间复杂度为O(|V|+|E|)。同时,拓扑排序还可用于计算工程的critical path,即最小代价完成所有工程的路径。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



