生成具有n个顶点的所有DAG

时间:2016-07-09 22:40:07

标签: algorithm language-agnostic graph-theory enumeration

我想生成所有带有n个顶点的DAG,直到同构 - 也就是说,没有重复的未标记DAG。是的,我知道这些很多,但我主要关注的是小数字(例如,n小于10),其中的东西仍然易于处理。

明显的方法,例如添加所有可能的边缘组合有两个主要缺点:

  1. 这样会产生比唯一图形更多的重复(同构),特别是当n增长时。
  2. 需要检查每个生成的图表,看它是否包含周期。

1 个答案:

答案 0 :(得分:0)

您可以从simple complete graph Kn开始,其中n是图表的顺序,然后枚举其所有spanning treesThe algorithm是一个经过修改的DFS,它使用回溯并避免bridges(以保持生成连接的树),同时探索所有可能的不同组合。

根据Cayley's formula,有n^(n-2)(其中^表示提升权力)跨越Kn上的树,因此您最糟糕的情况可能看起来像9^7=4782969并包括重复。

这也让人联想到一个"子问题"在Motif Detection中,some algorithms(或this one)的目标是生成all simple connected graphs (not limited to trees) of order n (motifs),然后将图形分解为n个图案。所以,这些文献也可能对你有用。

希望这有帮助。