一、拓扑排序概述
一场大型工程,我们往往把它看做多个子工程的集合体,这些小工程有的相互连接,一个是一个的子工程,有的相互并列,共处于一个工程的顺序之下,我们可以画一个图来表示这个工程和这些子工程的联系,它称为AOV网。
举个例子:小S作为班级的学习委员,掌管全班的收发作业,他手下还有一些班干部,但是作业实在太多了,而且人手有限,不可能同时收发所有科目作业,所以,他决定权衡利弊,优先收脾气不好的老师所布置的作业,先给他送过去,比如脾气特别暴躁的物理老头,假如作业不能及时送过去,不免一番批评。数学,物理,生物都是重要的科目,这三科可以分散班委同时收。小S和英语老师关系不错,所以可以暂缓。而语文老师比较人性,偶尔皮一下也可以过关。所以这项工程画成AOV网如下表示:
拓扑排序是一个AOV网中的重要算法,只应用于有向无环图(这十分重要!!!)
假如说不是一个有向无环图,这与理论和事实都是相悖的。举个例子,收英语作业的前提是数学、化学和生物都收完了,而收语文的前提是英语作业收完,假如说语文是数学、化学和生物的前提,这就会产生逻辑上的混乱,现实工程也会难以实现。
构造拓扑排序列可以帮助我们合理安排一个工程的进度,而由AOV网构造拓扑排序非常便捷,且有很高的使用价值。
二、拓扑排序算法
对于AOV的子工程来说来说,每一个节点都拥有入度(有多少点导向它,也就是开始它有多少前提)和出度(它导向多少点,也就是它是多少工程开始的前提)。例如 英语 的入度为3,出度为1。