【数据结构与算法python】拓扑排序算法-DFS算法

1、引入

很多问题都可转化为图, 利用图算法解决,例如早餐吃薄煎饼的过程,以动作为顶点,以先后次序为有向边,问题是对整个过程而言,如果一个人独自做,所有动作的先后次序?从加料开始?还是从加热烤盘开始?
【数据结构与算法python】拓扑排序算法-DFS算法_第1张图片

2、分析

从工作流程图得到工作次序排列的算法,称为“拓扑排序”,拓扑排序处理一个DAG, 输出顶点的线性
序列,使得两个顶点v,w,如果G中有(v,w)边,在线性
序列中v就出现在w之前。拓扑排序广泛应用在依赖事件的排期上,还可以用在项目管理、 数据库查询优化和矩阵乘法的次序优化上。
拓扑排序可以采用DFS很好地实现:

  • 将工作流程建立为图,工作项是节点,依赖关系是有向边
  • 工作流程图一定是个DAG图,否则有循环依赖
  • 对DAG图调用DFS算法,以得到每个顶点的“结束时间”
  • 按照每个顶点的**“结束时间”从大到小排序**
  • 输出这个次序下的顶点列表

以下为一个例子
【数据结构与算法python】拓扑排序算法-DFS算法_第2张图片
【数据结构与算法python】拓扑排序算法-DFS算法_第3张图片

你可能感兴趣的:(数据结构与算法,数据结构与算法,python,拓扑排序算法,深度优先算法,DFS算法)