我们说我们有一组字母,例如{A,B,C,D,E,F}我们希望按顺序排列,受一组规则约束。
我们不知道序列是什么样的,但我们确实知道序列中有哪些字母。我们有关于字母对的排序的信息。是否有任何众所周知的算法或方法可以找到满足给定信息的可能序列?
例如,我们说我们有以下信息:
满足这些标准的可能序列是什么?
答案 0 :(得分:2)
构建有向图G(V,E)
V = {a,b,c,d,e}
你的信件
E = (x,y) for any pair where x comes before y.
然后使用拓扑排序(read more here)(visualization here)
答案 1 :(得分:0)
使用depth-first search(DFS)可以解决此问题。
在您的示例中,问题的初始状态为
------ abcdef
BE
EC
DA
BF
ED
也就是说序列中没有添加任何字母,其余可用字母为abcdef
,其余规则为" B
必须在{{1}之前}" 等。
规则右侧的所有字母都不能被选为下一个字母。因此E
是第一个字母的唯一选择。新问题状态是
B
与B----- acdef
EC
DA
ED
有关的规则已得到满足,无其他用途。第二个字母必须是B
或E
,因为F
出现在规则的右侧。假设DFS首先探索ACD
,则新状态为
E
允许的选择为BE---- acdf
DA
,因为CDF
仍在规则的右侧。选择A
C
允许的选择是BEC--- adf
DA
。选择DF
D
选择BECD-- af
,然后选择A
,顺序完成
F
在达成解决方案后,DFS必须返回并探索其他选项。例如,选择BECDAF
而不是F
作为第二个字母。