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