【问题标题】:Generate a large random planar graph生成一个大的随机平面图
【发布时间】:2010-07-12 20:33:45
【问题描述】:

生成大型(约 300k 个顶点)随机平面图(这里的“随机”表示均匀分布)的最有效方法是什么?

【问题讨论】:

  • “均匀分布”是什么意思?您的意思是从具有 M 个节点的 N 个平面图中选择,其概率为 1/N?你知道对于十几个节点来说 N 有多大的天文数字吗?

标签: algorithm language-agnostic random graph-theory planar-graph


【解决方案1】:

另一种可能性是随机选择坐标,然后计算 Delaunay 三角剖分,这是一个平面图(看起来也不错)。请参阅http://en.wikipedia.org/wiki/Delaunay_triangulation 有 O(n log(n)) 算法来计算这样的三角剖分。

【讨论】:

  • 但它的度数是固定的 3?
  • 它没有固定的 3 度,但它是平面的。
  • 这个答案是错误的。这不会按照问题的要求给出均匀分布。
  • 这只会产生长度为 3 的无弦循环(即三角形循环)的图形,这可能并不总是可取的。
【解决方案2】:

你看过玻尔兹曼抽样吗?请参阅 Eric Fusy 的论文“线性时间内平面图的均匀随机抽样”。该论文和实现可在他的homepage 中找到,该论文称可以在几秒钟内生成大小为 100K 的实例。

【讨论】:

  • 这是均匀分布的正确答案。
【解决方案3】:

如果没有任何其他要求,我会说查找随机迷宫生成。如果您想要图中的循环,请从简单的迷宫中随机移除一些墙壁。迷宫中的交叉点成为图表中的节点,移除的墙壁是边缘。这意味着您可以通过选择迷宫的大小来选择节点的数量。

迷宫通常在 2d 网格上完成,从一个点到另一个点最多有 4 个连接,但没有什么能阻止您在六角瓷砖或其他东西上做迷宫。

【讨论】:

    【解决方案4】:

    如果您所说的均匀是指在空间中均匀分布,那么这是我开发的一种非常快速的算法,用于为空间生态/进化模拟器生成平面图。它将生成具有您指定的预期度数的随机平面图,当然还有一些变化。如果您想要平面图中的统一随机度数,您可以扩展它以根据统一随机数选择预期度数。

    https://github.com/briandconnelly/seeds/blob/master/seeds/plugins/topology/CartesianTopology.py

    【讨论】:

    • 看来这个算法可以生成边交叉的图?那不是平面图。例如,如果在给定半径的圆中有 4 个点,它们都将相互连接并且对角线将交叉,从而使图形非平面。
    【解决方案5】:

    一种方法是尝试生成一个满足与平面图类似的约束的随机图(例如,边

    有一些关于生成平面图的文献,我可以在这里找到一篇论文:Generating Labeled Planar Graphs 这显然已经预期了 O(n^4) 的运行时间,而且可能也不值得。也许那里的参考资料会帮助您找到可能有帮助的东西。

    祝你好运!

    【讨论】:

    • 肯定几乎所有的随机图都不是平面的?
    • 随机图是平面的,只有指数小概率,这意味着建议的算法具有指数时间复杂度!唉,随机图的结构与平面图完全不同(例如光谱特性)。
    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 2014-12-27
    • 2017-01-29
    • 2023-01-03
    • 2011-09-18
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多