大家复活节快乐。
我正在学习拓扑排序,并对拓扑排序尝试真正排序的内容有疑问。
算法设计手册这样描述拓扑排序:
拓扑排序是有向无环图(DAGs)上最重要的操作。 它将顶点按顺序排列在一条线上,使所有有向边从左到右。
这个加粗部分让我感到困惑。那么,是拓扑排序对顶点排序还是对所有有向边进行排序?
我们来看一下书中的例子。
对于上述DAG,我们可以得到一个拓扑排序(G, A, B, C, F, E, D)。我能理解这个排序。不仅顶点被排序,边也被排序了,即G->A->B->C->F->E->D,这与上面ADM书中的描述相匹配:“所有有向边从左到右”。
但是,如果我删除B->C的边呢?生成的图仍然是一个DAG,但是拓扑排序仍然是(G, A, B, C, F, E, D)吗?
如果是的话,那么我认为边没有被排序,因为A->B->C不再存在,而是A->B和A->C。那么,在这种情况下,这仍然是一个有效的拓扑排序吗?即使A是B和C的父节点,我们仍然可以认为(G, A, B, C, F, E, D)是一个有效的排序吗?
谢谢
B->C
,那么两者都是可行的解决方案![除非我错过了某些边]就像我所提到的,拓扑排序可能有多个解决方案。 - amit