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