生成大型随机平面图

时间:2010-07-12 20:33:45

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

生成大型(~300k顶点)随机平面图的最有效方法是什么(“随机”在这里意味着均匀分布)?

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

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

迷宫通常在2d网格上完成,从一个点到另一个点最多有4个连接,但是没有什么可以阻止你在六角形瓷砖上做迷宫,或者别的什么。

答案 2 :(得分:3)

你看过Boltzmann的采样了吗?参见Eric Fusy撰写的论文“线性时间平面图的均匀随机抽样”。论文和实现可以在homepage中找到,论文称可以在几秒钟内生成大小为100K的实例。

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

一种方法是尝试生成一个随机图,它满足与平面图相似的约束(例如,边<= 3 *顶点 - 6),并在O(n)时间内检查它是否是平面的Tarjan的平面度测试算法。如果它不是平面的,则再次生成。不知道这对于300K顶点有多高效!(或者如果它甚至可以为你提供具有统一概率的图形)。

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

祝你好运!