拓扑排序算法

一 拓扑排序的定义

在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序

(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 时间复杂度

  • 邻接表: O(|V|+|E|)
  • 邻接矩阵:O(|V|^{2})

2 逆拓扑排序

对一个AOV网,如果采用下列步骤进行排序,则称为逆拓扑排序

(1)从AOV网中选择一个没有后继(出度为0)的顶点并输出;

(2)从网中删除该顶点和所有以它为终点的有向边;

(3)重复(1)(2),直到当前的AOV网为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值