解決方案:定義取出的行號爲choice,第一次直接以第一行做爲取出行 choice ,然後第二次以二分之一律率決定是否用第二行替換 choice ,第三次以三分之一的機率決定是否以第三行替換 choice ……,以此類推。擴展
這種方法的巧妙之處在於成功的構造出了一種方式使得最後能夠證實對每一行的取出機率都爲1/n(其中n爲當前掃描到的文件行數),換句話說對每一行取出的機率均相等,也即完成了隨機的選取。方法
回顧這個問題,咱們能夠對其進行擴展,即如何從未知或者很大樣本空間隨機地取k個數?文件
類比下便可獲得答案,即先把前k個數放入蓄水池,對第k+1,咱們以k/(k+1)機率決定是否要把它換入蓄水池,換入時隨機的選取一個做爲替換項,這樣一直作下去,對於任意的樣本空間n,對每一個數的選取機率都爲k/n。也就是說對每一個數選取機率相等。解決方案