题目:要求从N个元素中随机的抽取k个元素,其中N无法确定
解法:首先选择N中的前k个数加入“蓄水池”中,然后从第k+1个数开始,以k/k+i(i=1,2,3...)的概率选择这个数,然后在蓄水池中随机选择一个数,并将其替换,N个元素遍历完毕后,蓄水池中的k个数就是随机选择的。
证明:这里即需要证明任意一个数出现在蓄水池中的概率都是k/(k+i),假设现在有k+i个元素
任意一个数出现在蓄水池中的概率P=P(原来在,并且也没有被替换掉)+P(原来不在,刚刚被选进蓄水池)
第一项P(原来在,并且也没有被替换掉)=P(原来在)*P(没有被替换)=k/(k+i) * (1-P(被替换)) = k/(k+i) * (1-(k/k+i) *(1/k)) = (k*k)/(k+i)*(k+i)
第二项P(原来不在,刚刚被选进蓄水池)=P(原来不在)*P(刚刚被选进蓄水池)=i/(k+i) * k/(k+i) = (i*k)/(k+i)(k+i)
所以总的概率P=k/(k+i)