適用情況:
從n個數中等概率隨機取出k個數,
n很大,k也很大;n不固定增量型
內容:當i屬於1~k i入池
當i>k i以概率k/i決定是否進入池,1/k概率剔除池中乙個數
證明:1:當i
當k個數時, i留下概率=1
當k+1個數時,i被淘汰的概率=1/k*k/k+1=1/k+1
i留下概率=1-1/k+1=k/k+1
當k+2個數時,i被淘汰的概率=1/k*k/k+2=1/k+2
i留下概率=1-1/k+2=k+1/k+2
當n個數時, i被淘汰的概率=1/k*k/n=1/n
i留下概率=1-1/n=n-1/n
i留下概率=1*k/k+1*k+1/k+2........n-1/n=k/n;
2:當i>k
在出現時被選中*在出現後不能被換走
即k/i*i/i+1*i+1/i+2……….n-1/n=k/n;
參考:蓄水池演算法
蓄水池演算法
參考文章 問題定義 給你乙個長度為n的鍊錶。n很大,但你不知道n有多大。你的任務是從這n個元素中隨機取出k個元素。你只能遍歷這個鍊錶一次。你的演算法必須保證取出的元素恰好有k個,且它們是完全隨機的 出現概率均等 求解蓄水池抽樣演算法 該演算法是針對從乙個序列中隨機抽取不重複的k個數,保證每個數被抽取...
蓄水池演算法
在乙個未知的池子裡選1個數字,讓他們被選擇概率一致。假設n的時候,前n個數字被選擇的概率都是1n 當為n 1時候,當前n 1這個數,我們選擇的概率是1n 1,其餘數字的概率是nn 1,那麼一共有n個數字的概率是1n 所以 n 1n 1 n 1 1n 1 具體演算法 使用的方式是i random.ra...
蓄水池演算法
題目 有乙個機器按自然數序列的方式吐出球 1號球,2號球,3好球。你有乙個袋子,袋子最多只能裝下k個球,並且除袋子以外,你沒有更多的空間。設計一種選擇方式,使得當機器吐出第n號球的時候 n k 你袋子中的球數是k個,同時可以保證從1號球到n號球中的每乙個,被選進袋子的概率都是k n。舉乙個更具體的例...