【发布时间】:2012-02-24 23:55:49
【问题描述】:
排序和拓扑排序有什么区别?
它们是相同的还是不同的?
【问题讨论】:
标签: algorithm sorting computer-science topological-sort
排序和拓扑排序有什么区别?
它们是相同的还是不同的?
【问题讨论】:
标签: algorithm sorting computer-science topological-sort
在抽象层面上,它们是相互关联的:正如 Saeed 和 Stefan 所说,这是全序和部分序之间的区别。这是一个非常简洁的描述,但有时在您学习时没有帮助。
总顺序意味着,在没有重复的情况下,当您对某样东西进行排序时,您将得到一个独特的正确答案。如果按升序对 3、6、2 进行排序,最好得到一个答案:2、3、6。
部分订单稍微宽松一些。典型的例子是你穿衣服的顺序:你可以穿短裤,然后是裤子,然后是袜子,然后是鞋子。这是一个有效的命令。或者你可以做短裤、袜子、裤子、鞋子。但直觉上,你不能做短裤、裤子、鞋子、袜子。穿鞋后穿袜子是没有意义的。
为了正式化该穿衣示例,您通常会显示一个以动作(“穿上鞋子”)作为节点的依赖关系图,以及显示哪个节点必须先于其他节点的有向弧。拓扑排序是图中所有节点的排序,类似于尊重弧的排序。意思是,如果从袜子到鞋子有一条弧线,那么袜子最好在鞋子之前。
同样,在抽象层面上,它们是相互关联的。但它们绝对不是一回事。
【讨论】:
拓扑排序通常是指找到符合某种偏序的全序,例如有向无环图中的可达关系。
【讨论】:
在拓扑排序中,我们处理partially ordered set,但在正常排序中,我们处理total ordered set。
在拓扑排序中,集合的一对元素之间可能没有任何关系,就像在有向图中一样,某些节点之间没有任何关系。在正常排序中,集合的所有元素对都有关系。例如,在一组数字中,所有对之间都有关系 ,=,所以它是全序的。
【讨论】:
如果总订单可用,则可以将每个对象与每个对象进行比较。在这种情况下,您可以对 wrt 进行排序。那个命令。示例是整数 wrt。 >(或
如果只有部分顺序可用,则不是每个对象都可以与其他对象进行比较。只有某些对象之间的关系可用。一个例子是编译单元之间的依赖关系。拓扑排序的任务是找到对象的排序,以便尊重部分顺序(例如,通过编译依赖于这些单元之后的其他单元的单元)。这里有几种可能的解决方案(即排序):如果 A 依赖于 B 并且存在其他一些单元 C,则可能的编译序列是 B,A,C 和 C,A,B(A 在 B 之前编译的每个序列)。
【讨论】: