完整的问题是:
编写一个方法,从一个大小为 的数组中随机生成一组 m 个整数
n
。每个元素必须具有相同的被选中概率`
这个问题是从“Crack the coding interview”中挑选出来的,解决方案是这样的:
我们可以将元素与数组开头的元素交换,然后“记住”数组现在只包含元素
j
和更大的元素。也就是说,当我们选择subset[0]
be时array[k]
,我们用array[k]
数组中的第一个元素替换。当我们选择 时subset[1]
,我们认为是“死的”,我们选择1 和 array 之间array[0]
的随机元素。然后我们设置子集[1] 等于,并设置等于数组[1]。元素 0 和 1 现在“已死”。现在从 中选择,依此类推。y
size()
array[y]
array[y]
Subset[2]
array[2]
array[array size()]
我的问题是,如果我们缩小从中选择随机数的数组,那么每个数字被选择的概率1/remaining_num_elements
。它如何对所有元素保持相等?