有m个球,要扔到n个盒子里。其中每个球都是互相独立地扔。问最后平均有几个盒子是有球的?
这类问题是较为纯粹的数学问题,当然也可以用计算机精确地求出答案。
于是可以就可以根据上述式子编程解决,复杂度是 O(m^2)
化简得到: p(m) = 1 + (n-1)/n * p(m-1).
进一步: p(m) - n = (n-1)/n * ( p(m-1) - n)
进一步: p(m) - n = ( (n-1)/n ) ^ m * (-n)
于是: p(m) = n - n * ( (n-1)/n )^m.
当 m 比较大的时候,( (n-1)/n ) ^ m 趋近于 e ^ (-m/n)。当 m=n 时,有 p(m) = n - n / e,意味着此时,平均空盒子数为 n/e 。
还有一种更为巧妙的数学分析。
每个球,不落在特定盒子的概率是 (n-1)/n (这个显然了吧,一个球不落在2号盒子的概率当然是 (n-1)/n )。于是 m 个球,都不落在特定的盒子的概率是 ( (n-1)/n ) ^ m。这句话可以换个角度理解:对于一个盒子,m 个球都不落在该盒子中的概率是 ( (n-1)/n ) ^ m。
因此,对于 n 个盒子,平均空盒子数量为 n * ( (n-1)/n ) ^ m。这个与上面分析结果一致。
原文地址:http://blog.csdn.net/nisxiya/article/details/46397861