【数据结构与算法python】拓扑排序算法-DFS算法
1、引入
很多问题都可转化为图, 利用图算法解决,例如早餐吃薄煎饼的过程,以动作为顶点,以先后次序为有向边,问题是对整个过程而言,如果一个人独自做,所有动作的先后次序?从加料开始?还是从加热烤盘开始?
2、分析
从工作流程图得到工作次序排列的算法,称为“拓扑排序”,拓扑排序处理一个DAG, 输出顶点的线性
序列,使得两个顶点v,w,如果G中有(v,w)边,在线性
序列中v就出现在w之前。拓扑排序广泛应用在依赖事件的排期上,还可以用在项目管理、 数据库查询优化和矩阵乘法的次序优化上。
拓扑排序可以采用DFS很好地实现:
- 将工作流程建立为图,工作项是节点,依赖关系是有向边
- 工作流程图一定是个DAG图,否则有循环依赖
- 对DAG图调用DFS算法,以得到每个顶点的“结束时间”
- 按照每个顶点的**“结束时间”从大到小排序**
- 输出这个次序下的顶点列表
以下为一个例子