如果我想生成 0 到 999 的 1000 个数字,这些数字是唯一的,我该怎么办?
我的第一次尝试是创建一个数组 {0, 1, 2, ..., 999} 并使用 std::random_shuffle
对它们进行洗牌。但是,由于我必须在一个很长的循环中生成数字,比如说 O(10^7),这种方法会耗尽运行时间。
有没有更好的方法来解决这个问题?
最佳答案
如果您存储 1000 个数字的数组,并在每次需要时在循环中调用 std::random_shuffle
,这实际上是您能够生成 1000 个随机数的最快方法以您需要的方式提供唯一编号。您不需要每次都重新创建数组。
如果你的循环有 O(10^7) 次迭代并不重要,因为如果你要按照你说的需要使用这 1000 个整数,那么它已经需要 O(n) 次操作来遍历通过这些数字中的每一个来使用它们。 std::random_shuffle
时间复杂度也是 O(n),所以它不会让你慢很多。
关于c++ - 随机生成 n 个唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16642501/