reservoid sample 蓄水池問題

2021-07-03 11:07:33 字數 658 閱讀 7663

題目:如何從無窮盡流中等概率的抽樣出乙個單詞?

或許我們換一種說法會更加容易理解.等概率的抽取出乙個單詞,也即隨機的抽取乙個單詞。本體的難點在於沒有給定單詞數,而是乙個無盡的流。

這個問題可以用蓄水池抽樣的方法來思考。先簡單的介紹一下蓄水池抽樣(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。也就是說對每個數選取概率相等。

證明如下:

蓄水池問題是一類問題,可以解決無窮盡流進行等概率抽取的問題。在工作中會有比較重要的應用。

蓄水池問題

蓄水池問題描述 假設有n個數,從中隨機抽取k個數字,如果保證抽取的過程是等概率的?其中n是不固定的 類似問題 1.從100個數字抽取20個,如果向100個數字中再增加20個呢?2.給你乙個長度為n的鍊錶,n很大,但你不知道n有多大,你的任務是從這n個元素中取出k個元素,你只能遍歷一次這個鍊錶,演算法...

蓄水池 抽樣

蓄水池抽樣問題描述的是,在乙個無窮盡的樣本中,要求隨即抽取一些樣本,這些樣本被抽取到的概率必須保持一致。乙個蓄水池就可以理解為無窮大的樣本空間。解決方案就是蓄水庫抽樣 reservoid sampling 主要思想就是保持乙個集合,作為蓄水池,依次遍歷所有資料的時候以一定概率替換這個蓄水池中的數字。...

蓄水池演算法

參考文章 問題定義 給你乙個長度為n的鍊錶。n很大,但你不知道n有多大。你的任務是從這n個元素中隨機取出k個元素。你只能遍歷這個鍊錶一次。你的演算法必須保證取出的元素恰好有k個,且它們是完全隨機的 出現概率均等 求解蓄水池抽樣演算法 該演算法是針對從乙個序列中隨機抽取不重複的k個數,保證每個數被抽取...