Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 生成具有n个顶点的所有DAG_Algorithm_Language Agnostic_Graph Theory_Enumeration - Fatal编程技术网

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

Algorithm 生成具有n个顶点的所有DAG,algorithm,language-agnostic,graph-theory,enumeration,Algorithm,Language Agnostic,Graph Theory,Enumeration,我想生成所有具有n个顶点的DAG,直到同构-也就是说,没有重复的未标记DAG。是的,我知道有很多,但我最关心的是小数字(例如,n小于10),其中的内容仍然是可处理的 明显的方法(如添加所有可能的边组合)有两个主要缺点: 这样的图比唯一图生成更多的重复(同构),特别是当n增长时 需要检查生成的每个图形,以查看它是否包含循环 可以从a开始,其中n是图的顺序,然后枚举其所有顺序。是一种改进的DFS,它使用回溯,并在探索所有可能的不同组合时避免(以保持生成连接树) 根据,Kn上有n^(n-2)(其中^表

我想生成所有具有n个顶点的DAG,直到同构-也就是说,没有重复的未标记DAG。是的,我知道有很多,但我最关心的是小数字(例如,n小于10),其中的内容仍然是可处理的

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

  • 这样的图比唯一图生成更多的重复(同构),特别是当
    n
    增长时
  • 需要检查生成的每个图形,以查看它是否包含循环
  • 可以从a开始,其中n是图的顺序,然后枚举其所有顺序。是一种改进的DFS,它使用回溯,并在探索所有可能的不同组合时避免(以保持生成连接树)

    根据,Kn上有
    n^(n-2)
    (其中
    ^
    表示提升到幂次)生成树,因此您的最坏情况可能看起来像
    9^7=4782969
    ,并且包含重复项

    这也让人联想到一个“子问题”,在这个问题中,for(or)的目标是生成,然后将图形分解为这些n个基序。所以,这些文献可能对你也有一些用处


    希望这有帮助。

    看看我有什么。据我所知,nauty只对无向图有效。理论上可以生成所有无向图,然后生成这些图的所有非同构方向,但这种方法在没有圈等限制条件下是不实用的,主要问题是“有重复项”。我的问题还不够清楚(我现在补充了说明),但主要的技巧是避免大多数天真方法固有的重复(即生成同构的DAG)。此外,您对
    n=9
    的估计似乎不正确-事实上,对于
    n=9
    ,有20286025个未标记的DAG(没有重复项)-已经超过了您的4782969(有重复项)-请参见。事实上,生成树方法似乎无法工作。例如,如何从(无向)生成树转换为DAG?那么,如何引导生成树的边生成一个平凡的“菱形DAG”,其中有
    a->{b,c},{b,c}->d
    ?这样的DAG在其无向骨架中有一个循环,因此我不知道树的边(没有循环)如何生成它。这不是我的估计,我所做的只是使用Cayley公式,它对某些树进行了两次计数。但是,是的,我没有记住“定向”。您可以使用度量标记重复项,并在发现过程中拒绝它们,但这只是一种补救措施。有关DAG问题,请参见主题。因为每条边都有三种状态,所以会有更多。我能问一下你在研究什么样的问题吗?对不起,我应该说“推导”,而不是估算。我想生成所有可能的二进制函数链,似乎获得2度的限制类DAG(以及一些附加要求)就能满足它。你能在正则表达式中捕捉或表述问题,然后使用“反向”正则表达式生成所有可能的实现吗?(例如,请参见(特别是Xeger部分)和python模块)