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