图论-拓扑排序(学习数据结构与算法分析 C++第三版—clifford A.Shaffer著)有感

”将一个DAG(有向无环图)中所有顶点在不违反前置依赖条件规定的基础上排成线性序列的过程称为拓扑排序。”

在书上给了两个算法,一个是基于DFS,一个是基于队列统计入度来做。

其实我觉得这两个算法的根源,其实就在于一个顶点(当然啦,在实际应用中可能是任务、工程等等等等。。。。。。)它的前置条件条件有多少?

DFS的末端,其实就是一些前置条件尽可能多,注意,是尽可能多的点,因为你不断的深入,也就是说你DFS的末端是要经历了很多任务的完成才可以到达的,按照我们的原则,前置条件越多的任务应该最后完成,当然了,DFS的机制会让我们得到一个倒序的序列,我们只需要倒一下就好了。


而基于队列来统计入度,然后进行输出入度为0的点,再依次循环处理其余点的入度,其实也是这样的一种思想,依赖条件越多,越后完成、输出,依赖条件越少,就应该越先完成。


我觉得学习算法如果能够明白一个问题的背景、算法里面的思想、这才是精髓,这才是能够历久弥新的东西,才能让我们不断创新。

你可能感兴趣的:(数据结构,学习笔记)