一 拓扑排序的定义
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序:
(1) 每个顶点出现且只出现一次;
(2)若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径。
注:每个AOV网都有一个或多个拓扑排序。
二 求拓扑排序的常用方法
1 方法
(1)从AOV网中选择一个没有前驱的顶点并输出。
(2)从网中删除该顶点和所有以它为起点的有向边。
(3)重复步骤(1)(2),直到当前的AOV网为空或当前网中不存在无前驱的顶点为止。
2 例题
求上图的拓扑排序的结果。
首先,选择入度为0的顶点并输出,图中度为0的顶点为3,则输出并删除,得到下图:
然后选择入度为0的顶点并输出,图中度为0的顶点为1,则输出并删除,得到下图:
然后选择入度为0的顶点并输出,图中度为0的顶点为4,则输出并删除,得到下图:
然后选择入度为0的顶点并输出,图中度为0的顶点为2或6,则随机输出其中一个顶点并删除,假设输出顶点2,得到下图:
然后选择入度为0的顶点并输出,图中度为0的顶点为6,则输出并删除,得到下图:
然后选择入度为0的顶点并输出,图中度为0的顶点为5,则输出并删除,删除后当前网为空。
则得到的拓扑排序为3、1、4、2、6、5或3、1、4、6、2、5。
三 拓扑排序算法分析
1 时间复杂度
- 邻接表:
- 邻接矩阵:
2 逆拓扑排序
对一个AOV网,如果采用下列步骤进行排序,则称为逆拓扑排序:
(1)从AOV网中选择一个没有后继(出度为0)的顶点并输出;
(2)从网中删除该顶点和所有以它为终点的有向边;
(3)重复(1)(2),直到当前的AOV网为空。