树的所有排列

时间:2013-10-07 19:13:01

标签: serialization tree permutation

我需要一种算法来计算给定树结构的所有可能的排列,例如:

4      3  
 \     |  
  \    2
   \  /  
    1  

这意味着,(4)需要在(1),(3)之前(2)和(2)之前(1)之前订购。因此输出应包含以下所有且不超过以下内容:< / p>

[4,3,2,1]  
[3,4,2,1]  
[3,2,4,1]

无效的订单例如是

[4,2,3,1]

因为(2)在(3)之前,但是(2)是图中(3)的后继。简单地计算所有排列并过滤无效排序不会出于效率的原因。

我不需要确切的代码,通常可以做到这一点的想法已经非常有用了。

2 个答案:

答案 0 :(得分:1)

这个问题是对有向图进行拓扑排序 它可以通过DFS以时间复杂度O(E + V)来解决。
http://en.wikipedia.org/wiki/Topological_sorting

答案 1 :(得分:0)

如果有人仍然对此感兴趣,我的问题的算法已经在70年代由Varol和Rotem在他们的论文中提出“生成所有拓扑排序安排的算法”
实际上搜索拓扑排序可以帮助我更早地找到解决方案,但是,文章可以在这里找到:http://comjnl.oxfordjournals.org/content/24/1/83.abstract