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

时间:2012-08-29 13:44:37

标签: algorithm implementation permutation probability random-sample

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

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

2 个答案:

答案 0 :(得分:5)

Knuth's your man为此,虽然其他算法可用。

答案 1 :(得分:2)

  • 创建一个数字从1到N的有序列表。
  • 随机播放(即创建它的排列)。这可以线性时间完成(参见this algorithm)。