从给定的n个数组中生成m个随机数

时间:2015-03-29 03:37:40

标签: algorithm

我有一个疑问。是否在n个数组元素中创建随机集m个整数意味着所有m个元素必须是唯一的,因为选择每个数字的概率是相等的。

例如,如果我有原始数组{1,2,3,4,5,6,7,8,9,10}(n = 10),我随机选择5个元素(m = 5) 。那么这是否意味着{1,1,5,7,9}是一个不可接受的解决方案,因为1发生了两次。

3 个答案:

答案 0 :(得分:0)

我认为这取决于用例。获取随机数的常规方法是使用Fisher-Yates算法。所以基本上你选择一个数字,然后将该数字移动到数组的末尾,并将数组的大小减少1,这样你选择的下一个数字就不会重复了。

基本伪代码:

  for i from n − 1 downto 1 do
       j ← random integer with 0 ≤ j ≤ i
       exchange a[j] and a[i]

答案 1 :(得分:0)

如果你真的从数组中随机选择,那么每个选择可能是相同的元素,所以试图从n个元素的数组(其中n> = m)构建一组m个元素的过程可能永远不会终止。例如,它可能只是一遍又一遍地选择相同的元素,因此永远不会增加所选元素集的大小。

答案 2 :(得分:0)

对你的问题的简短回答是否定的。选择意味着从给定的集合中选择一个元素(而不是复制/复制),这样我们就不允许更改原始集合。 m个元素不必是唯一的,但原始元素集(空格)应保持不变。