一个整数序列(n为多少不知道),要你从中随机取出k个数,每个数被选中的概率一样

一个整数序列(n为多少不知道),要你从中随机取出k个数,每个数被选中的概率一样:

答案是前K个数放入k大小的数组,当前如果是K+1个数用(k/k+1)概率选中 并和前K个数组中的元素随机替换。同理当选择K+2。。。。n的情况

证明如下:

数学归纳法

当n=K+1时:

  第K+1个数选中的概率是(K/K+1

  第一个数选中的概率为 (1/K+1) + (K/K+1)*(1 - K/K+1) = (K/K+1)

  ......

假设当n = m是前m个元素被选中的概率都是(K/M

  那么当你= m+1时:

  易见第m+1个元素选中的概率为(K/m+1

  那么第一个元素选中的概率是 (K/m)*(n+1-k/n+1 + k/n+1 * k-1/k) = (K/m+1

 

易见当n = m+1的时候也成立

所以全部成立。。。

posted @ 2010-09-19 23:51  David Luo  阅读(2946)  评论(0编辑  收藏  举报