【问题标题】:What is the best way to sort a partially ordered list?对部分有序列表进行排序的最佳方法是什么?
【发布时间】:2009-12-31 05:29:02
【问题描述】:

最好用一个小例子来说明。
给定关系

A < B < C
A < P < Q 

正确的输出应该是

ABCPQ or APQBC or APBCQ ... etc.

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

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

【问题讨论】:

  • 您是否在寻求一种合并两个排序列表的方法?
  • 不,一个最初随机排序的列表
  • 我还是不明白这个问题,抱歉。 “随机排序”是什么意思?如果结果应该排序,为什么你有几个可能的结果(对我来说,根本没有真正排序)?是否可以再举一个更长的例子?
  • @Kosi2801: A
  • 我无法从问题中看出您从什么信息开始。显然,您有一个为 A 和 B、B 和 C 定义的“

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


【解决方案1】:

这叫topological sorting

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

【讨论】:

    【解决方案2】:

    做几种。先按照第一个规则排序,然后按照第二个规则排序,以此类推。应该有效,除非您的规则包含矛盾。确实很容易实现。

    【讨论】:

    • 这只是一个例子 - 通常不只是 2 条规则
    • 我不确定规则的数量是否是个问题。结果仍然是正确的。可能有点性能问题。
    • 稳定排序很重要
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-07
      • 2010-12-16
      • 2018-11-20
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2021-06-09
      相关资源
      最近更新 更多