【转】蓄水池抽样

蓄水池抽样

  

1 排列公式A(n, m):
2 A(n, m) = n*(n-1)*(n-2)*...*(n-(m-1)) = n! / (n-m)!
3 注意0!=1(n!表示n(n-1)(n-2)...1,也就是6!=6x5x4x3x2x1
4 
5 组合公式C(n, m):
6 C(n, m) = A(n, m) / A(m, m) = (n! / (n-m)!) / (m! / 0!) = n!/((n-m)! * m!)

  对应蓄水池抽样问题,可以类似的思路解决。

  先把读到的前k个对象放入“水库”,对于第k+1个对象开始,以k/(k+1)的概率选择该对象,以k/(k+2)的概率选择第k+2个对象,以此类推,以k/m【即c(m-1, k-1) / c(m, k)】的概率选择第m个对象(m>k)。如果m被选中,则随机替换水库中的一个对象。最终每个对象被选中的概率均为k/n,证明如下。

       证明:第m个对象被选中的概率=选择m的概率*(其后元素不被选择的概率+其后元素被选择的概率*不替换第m个对象的概率),即

原文地址:https://www.cnblogs.com/apeway/p/10812926.html