Reservoir Sampling

Posted satyrs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Reservoir Sampling相关的知识,希望对你有一定的参考价值。

ReservoirSample(S[1..n], R[1..k])
 
  for i = 1 to k
      R[i] := S[i] 
  for i = k+1 to n
    j := random(1, i)   
    if j <= k
        R[j] := S[i]

若S为1-10 , k=3,则R初始为1,2,3

i=4时,1-4随机选取 4则1/4,1-3则3/4. 

3, 将4赋值给R[j]->1,2,4

2->1,4,3

1->4,2,3

4->1,2,3

在1-4中随机取3个数即以上四种情况,并且保证了每种情况概率为1/4.

以上为举例,数学证明同理。

i=5时,从5个数中取3,每个数取到概率为3/5,而3个数组合为1/10。循环可能情况恰为(4+6) 次。

证明容易,难以想到。

以上是关于Reservoir Sampling的主要内容,如果未能解决你的问题,请参考以下文章

Reservoir Sampling

Reservoir Sampling-382. Linked List Random Node

leetcode_398 Random Pick Index(Reservoir Sampling)

水塘抽样(Reservoir Sampling)问题

Reservoir Sampling - 蓄水池抽样算法

[leetcode]Reservoir Sampling-382. Linked List Random Node