关于拓扑排序的几点总结

拓扑排序的概念:

  • 重复一个操作:(遍历入度为0的点,遍历从这个点连接的其他点)

拓扑排序的注意事项:

  • 因为是遍历时是从一个点到其他点,也就是说,需要是有向边,再稍加推理即可得出这样一个结论:拓扑排序必须在DAG上.

拓扑排序的例题(难度由低到高):

  • P1137 旅行计划(普及+ 提高)

  • P1983 车站分级(提高+ 省选-)

  • P2883 [USACO07MAR]牛交通Cow Traffic(提高+ 省选-)

  • P1685 游览(省选 NOI-)

  • P3953 逛公园(省选 NOI-)

拓扑排序的适用范围:

  • 有向无环图(DAG)

关于拓扑排序的总结:

  • 无后效性:拓扑排序的过程类似动态规划的无后效性的体现。这是因为,拓扑排序都是由入度为0的结点开始运行的。而运行过一次的点,不需要再次运行。而在运行的过程中又会产生新的入度为0的结点,这就类似DP的状态转移方程了.
  • 图上算法:拓扑排序是一种图上算法。与之类似的算法有:Dijkstra,Kruskal等,其中,Dijkstra可以作用在无负边权的图上,而Kruskal可以运行在无向无环图上。而拓扑排序只能运行在DAG上.
  • 数论:数论中的拓扑,指:只考虑物体之间的位置关系而不考虑物体的形状和大小。(欧拉回路 例题:七桥问题)
  • 排序:拓扑排序也是一种“排序”算法,也就是说,他可以求出一些具有依赖关系的任务的排序关系。比如:选课问题。
  • 关系:拓扑排序可以用于求一系列对象之间的关系。比如:三角恋问题

你可能感兴趣的:(关于拓扑排序的几点总结)