问题描述:
1 | 从个元素中随机抽取个元素,但的个数无法事先确定。 |
抽样算法:
1.先选择n个元素中的前k个元素,保存在集合S中;
2.从第j(k+1 <= j <= n)开始,随机生成一个数 random = random % j + 1,random的取值范围为1~j。如果random <= k,则留下该元素,在S中随机选择一个元素进行替换;如果random > k,则放弃该元素。
3.重复2的步骤。
证明:
假定选择了k个元素
从k+1个元素开始,对于第k+1个元素,留下的概率,k/(k+1);对于S中的任意元素,留下的概率,
则对于任意第i个元素(k+1 <= i <= n),对于第i个元素,留下的概率为k/i;对于S中的任意元素,留下的概率,
参考:
http://www.guokr.com/blog/745588/
http://blog.jobbole.com/42550/