蓄水池算法概率分析

UTF8gbsn

背景

如果我们想得到一个长度为n样本空间中的m个采样。我们一般的做法是对 1 , 2 , . . . , n 1,2,...,n 1,2,...,n进行洗牌。然后选中前面m个元素作为采样样本。比如

A [ n ] = { 3 , 4 , 2 , 6 , 8 , 10 } , n = 6 A[n]=\{3,4,2,6,8,10\}, n=6 A[n]={3,4,2,6,8,10},n=6.如果我们想要采样出 m = 3 m=3 m=3个样本。

  • { 1 , 2 , 3 , 4 , 5 , 6 } \{1,2,3,4,5,6\} {1,2,3,4,5,6}进行shuffle洗牌。

  • 假如结果是 { 3 , 4 , 5 , 2 , 1 , 6 } \{3,4,5,2,1,6\} {3,4,5,2,1,6}那么。我们只取前面 m = 3 m=3 m=3个元素 { 3 , 4 , 5 } \{3,4,5\} {3,4,5}作为样本坐标。

  • 返回结果 A [ 3 ] , A [ 4 ] , A [ 5 ] A[3],A[4],A[5] A[3],A[4],A[5]是为结果。

当然还有一个更好的采样算法,这里不在介绍。可以参考《算法导论》英文第三版5.3-7题目

关于n未知的问题

如果我们的数据是不断的到达。事先我们并不知道n多大。那么怎么进行采样m个元素呢?答案是使用蓄水池采样。那么什么是蓄水池采样?我们先来描述一下蓄水池采样算法。

  • 首先假设数据按顺序不断到达A[1…n],注意n未知。

  • 前面m个数据直接进入蓄水池数列P[1…m]=A[1…m].

  • 如果是m+k个元素 k = 1 , 2 , . . . k=1,2,... k=1,2,... i = R a n d o m ( 1 , m + k ) i = Random(1, m+k) i=Random(1,m+k)

    如果 k ∈ { 1 , 2 , . . . , m } k\in \{1,2,...,m\} k{1,2,...,m}, P[k]=A[m+k],如果不是,什么也不做。

这就是蓄水池算法。

概率分析

我们要证明一件事情就是对于任意大的 n ⩾ m n\geqslant m nm,每一个元素进入蓄水池 P [ 1... m ] P[1...m] P[1...m]的概率都是 m / n m/n m/n.

from 1 to m

先分析前面m个元素最终进入蓄水池的概率。

  • 把数列 A [ 1... n ] A[1...n] A[1...n]分成两部分 A [ 1... m ] , A [ m + 1... n ] A[1...m], A[m+1...n] A[1...m],A[m+1...n]

  • 那么 A [ 1... m ] A[1...m] A[1...m]最终留在蓄水池中的概率,等于从 A [ m + 1 ] A[m+1] A[m+1] A [ n ] A[n] A[n]不被换出的概率。因为 A [ 1... m ] A[1...m] A[1...m]必定进入蓄水池。但是可能被后面的元素换出去。

  • m + 1 m+1 m+1开始分析直到 n n n

    • B(X)表示,A[1…m]中的元素 X X X被换出的概率
      B ( x ) = 1 m + 1 + m m + 1 1 m + 2 + m m + 1 m + 1 m + 2 1 m + 3 + m m + 1 m + 1 m + 2 m + 2 m + 3 1 m + 4 + . . . B(x)=\frac{1}{m+1}+\frac{m}{m+1}\frac{1}{m+2}+\frac{m}{m+1}\frac{m+1}{m+2}\frac{1}{m+3}+\frac{m}{m+1}\frac{m+1}{m+2}\frac{m+2}{m+3}\frac{1}{m+4}+... B(x)=m+11+m+1mm+21+m+1mm+2m+1m+31+m+1mm+2m+1m+3m+2m+41+...
      化简一下可得 B ( x ) = 1 − m n B(x)=1-\frac{m}{n} B(x)=1nm

    • N(X)用来表示A[1…m]中的元素X不被换出的概率
      N ( X ) = 1 − B ( X ) = 1 − ( 1 − m n ) = m / n N(X)=1-B(X)=1-(1-\frac{m}{n})=m/n N(X)=1B(X)=1(1nm)=m/n

  • 最终可得A[1…m]元素最终留在蓄水池中的概率为 m n \frac{m}{n} nm

From m+1 to n

这些元素最终留在蓄水池的概率为多少呢?不失去一般性我们证明元素m+k留在蓄水池中的概率。

  • 首先m+k号元素必须先进入蓄水池 m m + k \frac{m}{m+k} m+km

  • 从m+k+1元素开始的元素都不换出它。还是先计算换出的概率B(X)
    B ( X ) = 1 m + k + 1 + m + k m + k + 1 1 m + k + 2 + m + k m + k + 1 m + k − 1 m + k + 2 1 m + k + 3 + . . . B(X)=\frac{1}{m+k+1}+\frac{m+k}{m+k+1}\frac{1}{m+k+2}+\frac{m+k}{m+k+1}\frac{m+k-1}{m+k+2}\frac{1}{m+k+3}+... B(X)=m+k+11+m+k+1m+km+k+21+m+k+1m+km+k+2m+k1m+k+31+...
    化简得
    B ( X ) = 1 m + k + 1 + ( m + k ) ( 1 m + k + 1 − 1 n ) = 1 m + k + 1 + m + k m + k + 1 − m + k n B(X)=\frac{1}{m+k+1}+(m+k)(\frac{1}{m+k+1}-\frac{1}{n})=\frac{1}{m+k+1}+\frac{m+k}{m+k+1}-\frac{m+k}{n} B(X)=m+k+11+(m+k)(m+k+11n1)=m+k+11+m+k+1m+knm+k
    B ( X ) = 1 − m + k n B(X)=1-\frac{m+k}{n} B(X)=1nm+k 不换出的概率为 1 − B ( X ) = m + k n 1-B(X)=\frac{m+k}{n} 1B(X)=nm+k

  • 最后来计算m+k进入蓄水池的概率为
    m m + k × m + k n = m n \frac{m}{m+k}\times \frac{m+k}{n}=\frac{m}{n} m+km×nm+k=nm

conclusion

最终所有元素进入蓄水池的概率均为

m n \mathbf{\frac{m}{n}} nm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值