生成随机双连图

时间:2015-08-24 03:02:58

标签: graph graph-theory graph-algorithm

是否有一种简单的算法来生成随机无向双向图(给定多个顶点作为输入)?我理解如何确定一个给定的图是否是双连的,但我正在努力以编程方式生成一个。

2 个答案:

答案 0 :(得分:4)

你可以做一个非常简单的概率方法:

1. Create an empty graph with n nodes
2. For each pair of nodes:
 -Flip a fifty-fifty-coin to decide whether to put an edge in there or not

您有O(n ^ 2)对顶点,这也是此算法的预期运行时间,因为此过程生成的random graph将是双连接的with high probability。< / p>

因此,最后要确保您的图表真正是双向连接的,您只需运行您已经知道的常规程序。

对于(非常不可能)检查返回&#34;图形不是双连接&#34;的情况,只需重复该过程。

真正有趣的问题是&#34;为什么我会得到一个biconnected图w.h.p.?"。我会省略一些有点单调乏味的正式证据以及你的要求,我认为你只是想要一些有用的东西而你并不在乎为什么它有效。如果我错了,你确实需要一个证明,我建议你在mathoverflow上提问或者你给我发表评论 - 如果我找到时间的话,我可以试着让它成为正式。

目前,为了让您直截了当地说明为什么会有效,请考虑以下方法来证明:

  • 请注意,双连接的图形数量等于至少有一个关节顶点的图形数量。

  • 让我们粗略计算单个顶点成为关节点的概率:想法是如果v是关节顶点,那么它将n顶点分成两个不相交的集合大小为kn-k,使得这些集之间没有边缘。现在直观地说,k*(n-k)硬币翻转应该或多或少地清楚所有必须导致&#34;无边缘&#34;是不太可能的(基本上是(1/2)^(k*(n-k)))。我们仍然需要乘以n(因为对于每个节点),但这仍然没有显着差异,正如您现在可能看到的那样,非常对于足够大的& #39; N&#39;没有双向连接。

(仍然缺少的是考虑&#34;对于每个可能的分区&#34;,即k的不同选择,然后可能会更加小心,因为它实际上是{ {1}}和((n-1)-k),而不是k(n-k)因为正在考虑的顶点不属于任何2套...我只是说这些东西为了说明一个人仍然需要担心的正式证明......)

答案 1 :(得分:0)

一种简单的方法是创建随机最大平面(三连通)图:

  • 从一个循环中连接的3个顶点开始,形成2个三角形面(循环的内部和外部)。
  • 要添加每个后续顶点,请选择一个随机面,并将其与顶点和3个边缘相比。

你可以在这里停止 - 由于图形是三连接的,它也是双连接的。

但是,如果你想删除边缘并确保你仍然有一个双连通图形,那么只删除两个入射顶点都是3度或更多度的边缘,并在移除前使用Hopcroft & Tarjan's Depth-First Search Algorithm to find Biconnected Components测试每个边缘来检查没有那边的双重性。

注意 - 这将始终创建一个平面图。