Random 费舍尔·耶茨洗牌:如果在m次之后停止,是否随机?

Random 费舍尔·耶茨洗牌:如果在m次之后停止,是否随机?,random,shuffle,Random,Shuffle,我有整数1,2,3,…,n,我必须从中随机选取m

我有整数1,2,3,…,n,我必须从中随机选取m 在数组中随机选取一个条目。将其与最后一个条目交换。然后,在数组中随机选取除最后一个条目之外的一个条目。将此项与最后第二项交换。重复此操作,直到以这种方式获得最后m个条目

问题

我的理解是,如果一直持续到n次,那么在这次洗牌中,所有可能的安排都是同样可能的。因此,如果在m
我的理解正确吗?

是的,也许更容易继续:

rand(z)
返回范围
[0..z)

for(int i=0;i

X[0..m-1]
现在是随机样本

是。(这个答案甚至比发表评论的长度要求还要短……)你刚刚重新发明了。@finnw-很好的链接。谢谢你指出它。+1
for (int i = 0; i < m; i++)
    swap(X[i], X[i+rand(n-i)])