【问题标题】:Generating strongly-connected, uniformly-distributed, random di-graphs生成强连接、均匀分布的随机有向图
【发布时间】:2015-04-14 15:32:42
【问题描述】:

所以我一直在构建一个程序,该程序使用蒙特卡罗模拟来寻找进化图论的属性。其关键功能之一是能够生成均匀分布的随机图,以便我们可以确定图的广义属性。对于连接的无向图,我已经实现了this 答案中概述的解决方案。

但是对于有向图,生成从 Wilson 算法获得的单向统一生成树并不能确保该图是强连接的,并且似乎添加额外的边以使生成树双向会引入对您生成的图表的偏见。

我觉得我可能遗漏了一些明显/误解的东西,但基本上我的要求是,有人可以向我推荐一个允许我生成强连接、均匀分布、随机有向图的高级方案吗?

【问题讨论】:

  • 您是否测试过该答案实际上会生成统一的无向图?我很怀疑。
  • 图表是否未标记?您认为哪两个图表相等,例如如果它们仅在标签上有所不同?这对“均匀分布”的实际含义有很大影响。

标签: algorithm random directed-graph motzkin-numbers


【解决方案1】:

我能想到的最直接的解决方案是随机生成均匀分布的有向图并拒绝任何非强连接的有向图。这将保持均匀分布并保证您想要的属性。它可能效率不高,但如果您运行一些测试,您就会确定。

【讨论】:

  • 生成均匀分布的有向图有那么容易吗?如果它们没有标签怎么办?我们如何确保没有偏见?
  • @ead 如果未标记,则接受每个生成的标记图,其概率等于自同构数的 1(用例如 nauty 计算)。由于几乎所有有向图都只有微不足道的自同构,因此对于中等大小的图来说,分布之间的差异可能可以忽略不计。
  • @ead 生成均匀分布的有向图是这里唯一真正的问题,但这并不难。应该对分布均匀的度量进行一些思考:在 Erdos-Renyi 模型中,我们从给定数量 n 个顶点开始,并以概率 p(=0.5 为均匀情况)生成从顶点 a 到顶点 b 的边)。对所有 n^2 个可能的边执行此操作。该算法在 O(n^2) 时间内运行,无论如何这是你能做的最好的。由于几乎所有有向图都是强连接的(Moon 和 Moser 的论文),拒绝只会丢弃一小部分。
  • 几乎所有,是的,但如果密度被控制为足够稀疏(通过拨下 p 或通过固定弧数),则不是几乎所有。不过,@EdwardDoolittle 可能已经知道了。
  • @DavidEisenstat 是的,这就是我所说的“应该考虑分布均匀的度量”的意思。 “几乎所有”适用于边缘概率为 0.5 的分布。在没有其他信息的情况下,我认为这就是海报的意思。
【解决方案2】:

有人可以向我推荐一个高级方案,让我能够生成强连接、均匀分布的随机有向图吗?

我在为测试数据生成表达式树时遇到了类似的问题。我发现如果你知道如何计算独特的树,那么问题就变得容易了。我的意思是,我发现对于具有 N 个内部节点的完整二叉树,基于 N 的唯一树的数量是Catalan Numbers。那么对于具有 N 个节点的一元分支的二叉树,基于 N 的唯一树的数量是Motzkin Numbers

然后我找到了The On-Line Encyclopedia of Integer Sequences®。因此,如果您知道一个值 N,它可以唯一标识一个图形,并且您知道该 N 的唯一图形的相应计数并将这些计数放入 OEIS 搜索中,您应该返回一个有助于您搜索的页面。例如Catalan Numbers 用于完整的二叉树或Motzkin Numbers 用于常规二叉树。一路上,我发现生成它们的关键之一是recurrence relation

或者您可以在搜索中使用关键字,但这可能不会得到准确的命中。我只使用数字序列而不是通过关键字找到 Motzkin 数字。

这是strongly connected digraph 的 OEIS 查询

现在,如果您知道给定 N 的计数,并且您可以为给定 N 生成所有图形,或者可以在值和图形之间建立一一对应关系,那么您只需生成随机整数并获取/生成相应的图形.如果我正确理解您的问题,这应该可以解决。

我对这个问题的 OEIS 序列的最佳猜测是:

具有 n 个未标记节点的非循环有向图的数量。 A003087

其中引用了Uniform random generation of large acyclic digraphs

TL;DR

有关一些相关历史,请参阅我的问题:Algorithm improvement for enumerating binary trees

【讨论】:

  • @DaveGalvin 我不知道哪个序列是正确的,因为缺少一些信息,例如rootedlabeledcyclic 等。我希望发布赏金的人能清楚地说明哪个是正确的 OEIS 序列。如果他们这样做了,那么我会在这方面做更多的工作。
猜你喜欢
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2018-10-24
  • 2013-07-22
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多