以均匀随机的方式选择子集?

xyz*_*xyz 4 random combinatorics

问题是:

编写一个方法,从大小为n的数组中随机生成一组m个整数.每个元素必须具有相同的被选择概率.

这个答案是否正确?:

我随机选择第一个整数.接下来.如果它已经存在 我不接受别人接受它.并继续,直到我有整数.

fra*_*nkc 7

let m be the number of elements to select
for i = 1; i <= m; i++
   pick a random number from 1 to n, call it j
   swap array[j] and array [n] (assuming 1 indexed arrays)
   n-- 

在循环结束时,数组的最后m个元素是您的随机子集.渔民洗牌有一些变化.