题目:怎样从无穷尽流中等概率的抽样出一个单词?

也许我们换一种说法会更加easy理解.等概率的抽取出一个单词,也即随机的抽取一个单词。

本体的难点在于没有给定单词数,而是一个无尽的流。

这个问题能够用蓄水池抽样的方法来思考。先简单的介绍一下蓄水池抽样(reservoid sample)算法,我们能够结合算法理解其原理。

 Init : a reservoir with the size: k
for i= k+1 to N
M=random(1, i);
if( M < k)
SWAP the Mth value and ith value
end for

该算法设定蓄水池的大小为k,也就是等概率的取出k个单词。

即先把前k个数放入蓄水池,对第k+1。我们以k/(k+1)概率决定是否要把它换入蓄水池,换入时随机的选取一个作为替换项。这样一直做下去。对于随意的样本空间n,对每一个数的选取概率都为k/n。

也就是说对每一个数选取概率相等。

证明例如以下:

  reservoid sample 蓄水池问题-LMLPHP

蓄水池问题是一类问题,能够解决无穷尽流进行等概率抽取的问题。在工作中会有比較重要的应用。

參考:http://www.cnblogs.com/HappyAngel/archive/2011/02/07/1949762.html

05-28 06:55