一个整数序列(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的时候也成立
所以全部成立。。。