Random 从列表中选择n个随机条目
我有一个N个项目的数组,我想从中选择M个不同的随机项目,其中MRandom 从列表中选择n个随机条目,random,Random,我有一个N个项目的数组,我想从中选择M个不同的随机项目,其中M{1,2},2->{1,3},3->{2,3})。原始数组需要保持不变。
提前欢呼以防您破坏原始阵列:
选择0和N-1之间的随机元素位置,获取选定元素。将数组的最后一个元素移动到选定元素的位置。现在数组中少了一个元素。您可以重复此过程M次。第一个元素有
M/N
被选择的机会,因此以此概率选择它,然后递归或迭代进行
在伪码中,rand(k)
将给出一个在1
和k
之间均匀选择的随机整数:
for (i = N to 1)
{
if (rand(i) <= M)
{
choose i;
M--;
}
}
for(i=N到1)
{
如果(rand(i)有N个choose M=N!/((N-M)!M!)可能要选择的子集,那么选择这些子集的一些顺序,然后选择1到N之间的随机数choose M,然后使用该子集
例如,如果N=3,M=2,您的排序可以是{1,2},{1,3},{2,3},因此您可以从1到3中选择一个随机数,然后取相应的元素(1->{1,2},2->{1,3},3->{2,3})。原始数组需要保持不变。