algorithm - 如何证明采样算法?

标签 algorithm random

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

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

最佳答案

  1. 选中任何特定数字的几率是 m/n
  2. 如果选择这个数字,我们会遇到同样的问题,但是 n' = n - 1m' = m - 1。如果不是,我们有同样的问题,但 n' = n - 1m' = m

您的算法是这个想法的实现。

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

关于algorithm - 如何证明采样算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293622/

相关文章:

c++ - vector 如何成为返回类型值以及关于我的代码的另一个问题

algorithm - 递归调用是否计入空间复杂度?

python - 将 random.choice 与 if/elif/else 语句一起使用

c# - 随机数生成循环生成相同的数字

java - 方法不允许返回字符串

arrays - 在优于 O(N*M) 的时间内找到数组中多个区间的最小元素

algorithm - 用于检查与 N 个任务重叠的时间的更好算法

python - 打乱 2D numpy 数组中的位置列表,然后使用它在 3D numpy 数组中进行选择(或切片)

java - 随机选择字符串后如何从数组中删除字符串? java

c++ - 将大矩形分割成小矩形(2D 打包)