随机抽样问题

随机抽样问题,要求从N个元素中随机的抽取k个元素,其中N无法确定。
《计算机程序设计与艺术》中的题目,以下是分析求解以及证明的详细过程。

分析:
N个元素中随机抽取k个元素,即使每个元素被抽到的概率都是k/N,所涉及的算法最后也应该保证这个性质。

算法设计:
Reservoir Sampling (蓄水池抽样):
1.        Init: a reservoir with the size: k
2.        for i=k+1 to N,
3.            M=random(1, i);
4.            if( M <= k)
5.                SWAP the Mth value and ith value
6.        end for
   
证明:
1)初始状态,池中元素为k,每个元素被抽中的概率均为1,算法成立。
2)当i=k+1时,第i个元素被抽中的概率(即M<=k的概率)为k/i;前k个元素不被替换仍在池中的概率为(1-1/i)=k/i;故所有元素被抽中放入池中的概率均为k/i,算法成立。
3)假设i=j时算法成立,即所有元素被抽中放入池中的概率均为k/j;当i=j+1时,要证明所有的元素被抽中放入池中的概率均为k/(j+1);
首先,根据第j+1个元素被抽中的概率为k/(j+1),而前j个元素被抽中的概率包括两部分:①在i=j时被抽中(概率为k/j);②在i=j+1时不被替换(概率为1-1/(j+1)=j/(j+1))。根据乘法原则,前j个元素被抽中的概率为①②部分的乘积,即k/j*j/(j+1)=k/(j+1);
由此可得,当i=j+1时,每个元素被抽中的概率均为k/(j+1),算法成立。

 

参考:http://wansishuang.iteye.com/blog/443902

posted on 2012-10-14 21:45  小丑面具  阅读(585)  评论(0)    收藏  举报