【问题标题】:Randomly sorting (by fulfilling some conditions)随机排序(通过满足一些条件)
【发布时间】:2014-08-04 10:03:02
【问题描述】:

我正在寻找一种可以进行随机排序但满足某些条件的算法。

例如:

名单:{1,2,3,4,5,6,7,8,9}

条件:{(4 before 8), (6 before 1), (3 before 2)}

所以在列表的随机排序中,数字 4 必须在数字 8 之前,并且 等等……

我在 Java 中需要这个(使用 ArrayList),但我找不到算法来做到这一点! 如果有人知道做这件事的算法,请在答案中写下算法的名称,或者如果你知道如何解决它,稍微解释一下会很好。

【问题讨论】:

  • 使用任何排序算法,但添加条件:冒泡排序是最容易实现的算法
  • 但我不知道如何将这些条件添加到它:( @Amir
  • 您可以编写自己的比较器函数并使用任何排序算法。
  • Collections.shuffle()?它会给你一个随机的元素顺序。但我看不出你写的东西有一个清晰的模式。
  • @user2896551 4 必须在 8 之后?

标签: java algorithm sorting arraylist


【解决方案1】:

你真的想要topological sort。条件实际上是图中的边,而数字是节点。拓扑排序将产生一个保留所有约束的顺序。

【讨论】:

  • 这似乎是一个好的开始,但这不是每次都返回相同的有序列表吗?
  • 是的,这是一个公平的批评。随机有效地生成任何一种可能的顶级排序似乎是一个非常有趣/具有挑战性的问题。
  • @tieTYT 不一定。在维基百科伪代码中,“从 S 中删除节点 n”没有指定要删除的节点。如果您随机选择节点,您的结果将在仍然满足条件的情况下随机排序。
猜你喜欢
  • 2017-07-22
  • 2020-11-12
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
相关资源
最近更新 更多