排序部分有序列表的最佳方法是什么?

时间:2009-01-26 17:35:39

标签: algorithm language-agnostic sorting topological-sort partial-ordering

可能最好用一个小例子说明 鉴于关系

A < B < C
A < P < Q 

正确的输出将是

ABCPQ or APQBC or APBCQ ... etc.

换句话说,任何排序都是有效的,其中给定的关系成立。

我最感兴趣的是最容易实现的解决方案,但速度和时间方面的最佳O(n)也很有趣。

3 个答案:

答案 0 :(得分:9)

这称为topological sorting

标准算法是输出一个最小元素,然后将其删除并重复直到完成。

答案 1 :(得分:1)

做几种。首先根据第一个规则排序,然后根据第二个规则排序,依此类推。应该工作,除非你的规则包含矛盾。确实很容易实现。

答案 2 :(得分:1)

您可以使用手头的序列在C ++中重复调用make_heap,pop_heap。