Google采访算法难题:随机简单图中最大连通分量的预期大小(N个节点,N个边)?

时间:2015-02-15 15:48:50

标签: algorithm language-agnostic graph-theory combinatorics

  

给出 N 节点的随机简单图, N 边缘和均匀   边缘概率 p ,最大连通的预期大小是多少   成分

  • 提供的唯一初始输入参数是 N ,表示图表中的节点数
  • 图表是简单,意味着不允许包含任何自我循环
  • 正好有 N 节点配对,即。 edgelist的格式为{(1,a), (2,b), (3,c), ..., (N,[next available letter of the alphabet])}。条件是a!= 1,b!= 2,c!= 3等但除此之外,a,b,c,......可以取1到 N 的任何值
  • 可以通过均匀概率分布来描述与其他节点形成边缘的节点n
  • Foreach这样的有效图表由 N 节点和 N 边缘构成,找到最大连通分量的大小 S
  • 通过连接组件,这被定义为最大的群集/节点组,其中连接组件中的每个节点可以到达/可从同一连接组件中的每个其他节点到达

问题是:在构建的所有这些有效图中, S 的期望值是什么?

我想知道一种有效的方法来思考/分析/解决这个问题,该问题可以处理2到50之间的 N 。一些代码可以帮助我理解。


我编写了以下源代码以天真地强制实现可能性,希望从那里找到一个模式。通过以下方式管理以获得N = 9

两者都尝试根据问题中指定的条件生成所有可能的排列,然后为通过 BFS 生成的每个图形计算 S

到目前为止

输出

至于格式,例如。对于“N=4: {2:3,4:78} 106/27”行,这意味着有3个图表,其中最大组件的大小= 2,78个图表的最大组件大小= 4,因此最终answer = (3/(78+3))*2 + (78/(78+3))*4 = 106/27

N=2: {2:1} 2/1
N=3: {3:8} 3/1
N=4: {2:3,4:78} 106/27
N=5: {3:80,5:944} 155/32
N=6: {2:15,3:640,4:1170,6:13800} 17886/3125
N=7: {3:840,4:21840,5:19824,7:237432} 38563/5832
N=8: {2:105,3:17920,4:229320,5:422912,6:386400,8:4708144} 6152766/823543
N=9: {3:153440,4:786240,5:9634464,6:9273600,7:8547552,9:105822432} 17494593/2097152

编辑:刚发现这个OEIS sequence #A000435给出了N个节点和最大尺寸组件= N的图形数量的答案(公式/列表最多N = 18)。这与我的完全一致暴力输出,例如。对于N = 9,有105822432个具有最大连通分量的图= 9。不确定这是否有帮助 - 给出更大N的公式之一是a(n) = (n-1)! * Sum (n^k/k!, k=0..n-2) Python implementation


N = 4的示例:

4个节点总共有 81 可能的边缘分配(从 1 N 从1开始索引)。

以下示例输出的格式为:((1, 2), (2, 1), (3, 1), (4, 1)): 4表示节点1和2,节点2和1,节点3和1以及节点4和1之间存在边。假设边缘是无向的/双向的。对于这样的图,所有4个节点{1,2,3,4}中只有一个连通分量,因此最大(唯一)连通分量的大小为4。

生成此列表后,可以通过(fraction of all 81 instances where S == 4) * 4 + (fraction of all 81 instances where S {计算 S 的预期值{1}} 106/27 - 因为 S 的唯一值为2,4。

== 2) * 2 =

1 个答案:

答案 0 :(得分:0)

这不是解决方案,而是一些观察。

首先使用n个边和n个顶点,并且每个顶点连接到除自身之外的其他一些顶点,此图中任何大小为k的强连通分量必须具有正好k个边。这是从

开始的
  • 任何大小为k的SCC必须至少有k-1个边。在该图中,任何SCC都不可能具有恰好k-1个边缘,因为如果是这样的话,那么SCC中必须有一个顶点连接到另一个顶点&#39 ; s不在SCC中,因此使该SCC的大小为k的假设无效。
  • 在此图中也不可能任何SCC具有多于k + 1个边,因为每个顶点都连接到另一个顶点。

现在假设我们想要计算在这个问题中构造的有效图的总数,dp[n][k]是具有n个顶点和最大SCC大小为k的有效图的总数。然后dp[n][k]

  • 以某种方式从n个顶点中选择k个顶点并形成SCC,
  • 剩余的n-k个顶点的SCC大小不得大于k。

因此DP配方变为:

dp[n][k]=C(n,k)*dp[n-k][k] + 
         C(n,k)*dp[n-k][k-1] +
         C(n,k)*dp[n-k][k-2] + 
         ...
         C(n,k)*dp[n-k][2] +
         C(n,k)*dp[n-k][1]

其中C(n,k)n!/[(n-k)!k!]

(我不确定这是否正确,但希望是正确的方向)

n个顶点的有效图形总数为(n-1)**(n-1)。最大SCC的预期规模可以从期望的基本原则中得出。