排序和拓扑排序有什么区别?

时间:2012-02-02 10:10:35

标签: algorithm sorting computer-science topological-sort

排序和拓扑排序有什么区别?

它们是相同还是不同?

4 个答案:

答案 0 :(得分:5)

在抽象层面,他们是相互联系的:正如Saeed和Stefan所说,这是总订单和部分订单之间的差异。这是一个非常简洁的描述,但有时在你学习时没有帮助。

总订单意味着,在没有重复的情况下,当您对某些内容进行排序时,您将得到一个唯一正确的答案。如果按升序排序3,6,2,最好得到一个答案:2,3,6。

部分订单有点宽松。典型的例子是你穿上衣服的顺序:你可以穿短裤,然后是裤子,袜子,鞋子。这是一个有效的订单。或者你可以做短裤,袜子,裤子,鞋子。但直觉上,你不能做短裤,裤子,鞋子,袜子。鞋子穿上袜子是没有意义的。

为了使该修整示例正式化,您通常会显示一个带有动作(“穿上鞋子”)作为节点的依赖图,以及显示哪个节点必须先于其他节点的有向弧。拓扑排序是图中所有节点的排序,如同尊重弧的节点。意思是,如果从袜子到鞋子有弧形,那么袜子最好在订单之前。

再次,在抽象层面上,它们是相互联系的。但它们绝对不是一回事。

答案 1 :(得分:3)

拓扑排序通常是指找到符合某种偏序的总顺序,例如有向非循环图中的可达性关系。

答案 2 :(得分:3)

在拓扑排序中,我们处理partially ordered set,但在正常排序中,我们处理total ordered set

在拓扑排序中,可能在集合的一对元素之间没有任何关系,如在有向图中,在某些节​​点之间没有任何关系。在正常排序中,集合的所有元素对都具有关系。例如,在数字集合中,我们在所有对之间具有关系<,>,=,因此它是完全有序的。

答案 3 :(得分:1)

如果总订单可用,则可以将每个对象与每个对象进行比较。在这种情况下,您可以对wrt进行排序。那个命令。例子是整数wrt。 > (或<,或< =,...)或字符串wrt。词典排序。如果您有总订单可以进行分类。

如果只有部分订单可用,则不是每个对象都可以与其他所有对象进行比较。只有某些对象之间的关系可用。一个例子是编译单元之间的依赖关系。拓扑排序是查找对象排序以使得部分顺序得到遵守的任务(例如,通过编译依赖于这些单元之后的某个其他单元的单元)。这里有几种解决方案(即排序)是可能的:如果A依赖于B并且存在一些其他单元C,则可能的编译序列是B,A,C和C,A,B(在B之前编译A的每个序列)。 / p>