如何证明采样算法?

时间:2010-11-27 20:04:32

标签: algorithm random

这是一个家庭作业问题。为了在[0,N]范围内打印M个不同的随机整数,我们可以使用以下算法:

int n = N 
int m = M 
for i in [0,N)
    if (bigrandom() % n--) < m) 
        print i
        m--
众所周知,该算法以相同的概率选择范围内的所有整数。你能帮我证明一下吗?

1 个答案:

答案 0 :(得分:1)

  1. 选择任何特定号码的可能性为m/n
  2. 如果选中此号码,我们会遇到同样的问题,但n' = n - 1m' = m - 1会有问题。如果不是,我们会遇到同样的问题,但n' = n - 1m' = m
  3. 您的算法就是这个想法的实现。

    你还需要证明假设1,但你可以自己做。