algorithm - 随机排列

标签 algorithm random permutation

我想尽快生成一个随机排列。 问题:O(n) 的 knuth 洗牌涉及生成 n 个随机数。 由于生成随机数非常昂贵。 我想找到一个涉及固定 O(1) 数量的随机数的 O(n) 函数。

我知道这个问题以前有人问过,但我没有看到任何相关的答案。

只是强调一点:我不是在寻找小于 O(n) 的算法,而是一种涉及更少随机数生成的算法。

谢谢

最佳答案

创建每个排列到从 1 到 n 的数字的 1-1 映射! (阶乘)。生成一个1到n!的随机数,使用映射,得到排列。

对于映射,也许这会很有用:http://en.wikipedia.org/wiki/Permutation#Numbering_permutations

当然,这很快就会失控,因为 n!很快就会变得非常大。

关于algorithm - 随机排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3079633/

相关文章:

java - 在 2D 区域中查找多边形

c - 仅使用递归编写 C 函数

Java Hashmap 使用随机返回给定键的值

algorithm - 具有奇怪循环重复的独特排列

python - 如何在给定字符集的情况下获得第 n 个排列,反之亦然

java - Java 中 ArrayList 的 add() 方法背后的算法是什么?

c++ - 如何为许多短任务设计线程

c# - 使用 System.Random

random - 从数组中采样 N 个元素的函数

python - 比提供的解决方案更快地获取排列索引和索引处的排列