所以我一直在构建一个程序,它使用蒙特卡罗模拟来寻找进化图论的属性。其关键功能之一是能够生成均匀分布的随机图,以便我们可以确定图的广义属性。对于连接的无向图,我已经实现了这个答案中概述的解决方案。
然而,对于有向图,生成从 Wilson 算法获得的单向统一生成树并不能确保图是强连接的,并且似乎添加额外的边以使生成树双向会引入偏差您生成的图表。
我觉得我可能遗漏了一些明显/误解的东西,但基本上我的要求是,有人可以向我推荐一个高级方案,允许我生成强连接、均匀分布、随机有向图吗?
所以我一直在构建一个程序,它使用蒙特卡罗模拟来寻找进化图论的属性。其关键功能之一是能够生成均匀分布的随机图,以便我们可以确定图的广义属性。对于连接的无向图,我已经实现了这个答案中概述的解决方案。
然而,对于有向图,生成从 Wilson 算法获得的单向统一生成树并不能确保图是强连接的,并且似乎添加额外的边以使生成树双向会引入偏差您生成的图表。
我觉得我可能遗漏了一些明显/误解的东西,但基本上我的要求是,有人可以向我推荐一个高级方案,允许我生成强连接、均匀分布、随机有向图吗?
我能想到的最直接的解决方案是随机生成均匀分布的有向图并拒绝任何非强连接的有向图。这将保持均匀分布并保证您想要的属性。它可能不是非常有效,但是如果您运行一些测试,您肯定会知道。
有人可以向我推荐一个允许我生成强连接、均匀分布、随机有向图的高级方案吗?
我在为测试数据生成表达式树时遇到了类似的问题。我发现如果你知道如何计算独特的树,那么问题就变得容易了。我的意思是,我发现对于具有 N 个内部节点的完整二叉树,基于 N 的唯一树的数量是Catalan Numbers。然后对于具有 N 个总节点的一元分支的二叉树,基于 N 的唯一树的数量是Motzkin 数。
然后我找到了 The On-Line Encyclopedia of Integer Sequences®。因此,如果您知道一个值 N,它可以唯一地标识一个图形,并且您知道该 N 的唯一图形的相应计数并将这些计数放入 OEIS 搜索中,您应该返回一个有助于您搜索的页面。例如完整二叉树的加泰罗尼亚数或常规二叉树的莫茨金数。一路走来,我发现生成它们的关键之一是递归关系。
或者您可以在搜索中使用关键字,但这可能不会得到准确的命中。我只使用数字序列而不是通过关键字找到 Motzkin 数字。
现在,如果您知道给定 N 的计数,并且您可以为给定 N 生成所有图表,或者可以在值和图表之间建立一对一的对应关系,那么您只需生成随机整数并获取/生成相应的图表。如果我正确理解您的问题,这应该可以解决。
对于这个问题,我对 OEIS 序列的最佳猜测是:
具有 n 个未标记节点的非循环有向图的数量。A003087
其中参考了大无环有向图的统一随机生成
有关一些相关历史,请参阅我的问题:枚举二叉树的算法改进