Hackerrank之谜。随机图连接所需的边数

时间:2012-02-04 18:58:20

标签: algorithm graph

这是Interviewstreet难题:

  

我们有一个包含N个城市的国家/地区。每天我们选择2个城市,这样他们之间就没有道路,并且在他们之间建立了一条道路。我们以相同的概率选择每对不相邻的城市。设X是我们获得连接国家之前的天数。 X的预期价值是多少?输出答案的整数部分。

他们真正要问的是随机图G(n,m)连接需要多少个边m(平均值)。

在编写了一个实际执行实验的程序之后,我想出了通过9/10测试的“解决方案”

$f = fopen('php://stdin', 'r');
$n = intval(fgets($f));
echo round(1.25 * $n * log($n, 10));

那么可以用一个公式解决吗?找到随机图连通性可能性的正确方法是什么?

2 个答案:

答案 0 :(得分:14)

你应该查看1960年题为"On the evolution of random graphs"的鄂尔多斯和仁义的经典论文。它包含组件数量,最大组件大小等的完整概率界限。

这里有一些数学设置可以帮助你入门。

G(n,m)成为n个带m个边的顶点上的简单随机图。在X_k个已连接的组件之前,kk-1连接组件时添加的边数。例如,最初有n个连接组件,因此添加第一个边缘会产生n-1个连接组件,因此X_n = 1。类似地,第二个边缘也删除了一个组件(尽管这种方式有两种),所以X_n-1 = 1也是如此。定义

X = X_n + X_n-1 + ... + X_2

目标是计算E(X)X的预期值。通过可加性,我们有

E(X) = E(X_n) + E(X_n-1) + ... + E(X_2) 

要显示在有k个组件的情况下添加边的概率减少组件数的概率并不太难以(k-1)/(n-1)的下限。由于X_k是由此数量给出的成​​功概率的随机变量,因此下限给出了X_k的期望的上限:

E(X_k) <= (n-1)/(k-1)

结合这个,我们得到E(X) n log n的渐近上界。

通过鄂尔多斯 - 仁义报的更多工作和一些提示,你可以推断出一个确切的公式。

答案 1 :(得分:1)

OP是一个很好的解决方案,对公式略有修改,它总是会通过。

$f = fopen('php://stdin', 'r');   
$n = intval(fgets($f));  
echo round(1.249 * $n * log($n, 10));// constant factor is changed