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

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)