c++ - 随机生成 n 个唯一数字

标签 c++ random shuffle

如果我想生成 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/

相关文章:

php - 使用 PHP 选择 MySQL raw 时出错

performance - 从庞大的列表中进行有效的随机抽样

python - random_state 和 shuffle 在一起

java - 如何在 public void 方法中连续播放媒体(mp3)

c++ - 如何确定对象的对齐方式

c++ - 当我没有 Xcode 项目时,如何在 Mac OS 上获得可视化调试器?

c++ - Makefile 无法找到 *.o 文件来生成 .exe

c++ - 每次循环时都会创建相同的随机数。

python - 在 numpy 数组的列内独立洗牌

c++ - 我可以在其析构函数中使用指向已析构对象的指针吗?