我正在寻找一种允许我订购一套的算法,以便满足一系列条件。条件只能在"之前出现。或"必须出现在"之后。例如:
两个有效的解决方案是" ACDBE"和#34; EACDB"。我只关心找到一个有效的解决方案。
我不知道如何实现这一点。也许我只是不知道这个名字的正确名称,如果我这样做,我就能找到相关信息。
什么算法可以让我找到解决方案?或者这种算法叫什么(我应该用什么谷歌)?
答案 0 :(得分:4)
看起来您正在寻找topological sort。
我们的想法是,您可以在有向图中对依赖项进行编码:您的集合元素是节点,条件是边缘。当且仅当" A必须出现在B"之前时,A和B之间存在边缘。
拓扑排序可以保证找到问题的有效解决方案(如果存在),并且有一些众所周知的算法,其图形大小具有线性时间复杂度。
答案 1 :(得分:0)
使用图形进行拓扑排序可能是最好的方法,但是您可以使用基于位置的列表(如Java中的PositionalList ADT)并使用“之前,之后”方法进行遍历时对其进行排序。 / p>