題目:要求從n個元素中隨機的抽取k個元素,其中n無法確定
解法:首先選擇n中的前k個數加入「蓄水池」中,然後從第k+1個數開始,以k/k+i(i=1,2,3...)的概率選擇這個數,然後在蓄水池中隨機選擇乙個數,並將其替換,n個元素遍歷完畢後,蓄水池中的k個數就是隨機選擇的。
證明:這裡即需要證明每個數出現在蓄水池中的概率都是相等的,擬採用數學歸納法
1.當i=1時,蓄水池中某個數出現的概率
第k+1個數被取出的概率是k/k+1, 這時,蓄水池中每個數出現的概率都是1,同時,乙個數被選擇到的概率是1/k, 因此,乙個數出現在池中的概率是1-(k/k+1)*(1/k)=k/k+1
2.假設第i個數被取出的概率是k/k+i,證明在有k+i+1的樣本中,乙個數出現在池子裡的概率是k/k+i+1
第k+i+1個數被取出的概率是k/k+i+1, 池子中每個數的出現概率都是k/k+i, 池中的數被選擇到的概率是1/k, 乙個數在池中的概率就是 他出現在池中的概率*他沒有被替換的概率,就是(k/k+i)*(1-1/k*k/k+i+1),也就是k/k+i+1
蓄水池 抽樣
蓄水池抽樣問題描述的是,在乙個無窮盡的樣本中,要求隨即抽取一些樣本,這些樣本被抽取到的概率必須保持一致。乙個蓄水池就可以理解為無窮大的樣本空間。解決方案就是蓄水庫抽樣 reservoid sampling 主要思想就是保持乙個集合,作為蓄水池,依次遍歷所有資料的時候以一定概率替換這個蓄水池中的數字。...
蓄水池抽樣
給定乙個長度很長的資料流,在處理完成之前不知道其具體長度,如何在遍歷一遍資料流的情況下,隨機地抽出m個不重複的資料。key words 長度很長,遍歷完之前不可知 o n 複雜度 等概率地抽出m個數,每個數被抽中的概率為m n。如果接收的資料量小於m,直接放入蓄水池reservoir如果接收的數量大...
蓄水池抽樣
給定乙個資料流,資料流長度n很大,且n直到處理完所有資料之前都不可知,請問如何在只遍歷一遍資料 o n 的情況下,能夠隨機選取出m個不重複的資料。這個場景強調了3件事 資料流長度n很大且不可知,所以不能一次性存入記憶體。時間複雜度為o n 隨機選取m個數,每個數被選中的概率為m n。蓄水池抽樣演算法...