Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 生成前n个自然数的随机排列的最有效方法是什么?_Algorithm_Implementation_Permutation_Probability_Random Sample - Fatal编程技术网

Algorithm 生成前n个自然数的随机排列的最有效方法是什么?

Algorithm 生成前n个自然数的随机排列的最有效方法是什么?,algorithm,implementation,permutation,probability,random-sample,Algorithm,Implementation,Permutation,Probability,Random Sample,到目前为止,我一直在使用一个列表来跟踪遇到的所有唯一数字。我用一个随机数生成器得到一个介于1和n之间的随机数。如果那个数字已经在我的列表中,那么我就继续生成随机数,直到我遇到一个不在我的列表中的数字。当我得到一个不在我的列表中的新号码时,我将其添加到我的列表中并重复这个过程,直到所有的“n”号码都出现在我的列表中 显然,这种方法效率很低。有人能提出一个有效的解决方案吗?尽管有其他算法可用,但仍能解决此问题。尽管有其他算法可用,但仍能解决此问题。 创建一个编号从1到N的有序列表 将其洗牌(即,创建

到目前为止,我一直在使用一个列表来跟踪遇到的所有唯一数字。我用一个随机数生成器得到一个介于1和n之间的随机数。如果那个数字已经在我的列表中,那么我就继续生成随机数,直到我遇到一个不在我的列表中的数字。当我得到一个不在我的列表中的新号码时,我将其添加到我的列表中并重复这个过程,直到所有的“n”号码都出现在我的列表中

显然,这种方法效率很低。有人能提出一个有效的解决方案吗?

尽管有其他算法可用,但仍能解决此问题。

尽管有其他算法可用,但仍能解决此问题。

  • 创建一个编号从1到N的有序列表
  • 将其洗牌(即,创建其排列)。这可以在线性时间内完成(请参阅)
      • 创建一个编号从1到N的有序列表
      • 将其洗牌(即,创建其排列)。这可以在线性时间内完成(请参阅)
      可能的副本