订购一组带约束的项目

时间:2018-01-19 16:25:07

标签: algorithm

我正在寻找一种允许我订购一套的算法,以便满足一系列条件。条件只能在"之前出现。或"必须出现在"之后。例如:

  • A:必须出现在B
  • 之前
  • C:必须出现在A之后,必须出现在D
  • 之前
  • D:必须出现在B
  • 之前
  • 电子

两个有效的解决方案是" ACDBE"和#34; EACDB"。我只关心找到一个有效的解决方案。

我不知道如何实现这一点。也许我只是不知道这个名字的正确名称,如果我这样做,我就能找到相关信息。

什么算法可以让我找到解决方案?或者这种算法叫什么(我应该用什么谷歌)?

2 个答案:

答案 0 :(得分:4)

看起来您正在寻找topological sort

我们的想法是,您可以在有向图中对依赖项进行编码:您的集合元素是节点,条件是边缘。当且仅当" A必须出现在B"之前时,A和B之间存在边缘。

拓扑排序可以保证找到问题的有效解决方案(如果存在),并且有一些众所周知的算法,其图形大小具有线性时间复杂度。

答案 1 :(得分:0)

使用图形进行拓扑排序可能是最好的方法,但是您可以使用基于位置的列表(如Java中的PositionalList ADT)并使用“之前,之后”方法进行遍历时对其进行排序。 / p>