有没有更高效的算法生成指定数量的不重复随机数?
时间: 2024-10-24 12:18:47 浏览: 15
生成指定数量的不重复随机数,上面提到的方法虽然简单易懂,但它并不是最高效的方式,特别是当需要生成大量随机数时。更高效的方法通常涉及到数据结构,比如使用哈希表(如`std::unordered_set` 或 `std::unordered_map`)来存储已经产生的随机数,保证不会有重复。
以下是一个使用 C++ 中的哈希集合的例子:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_set>
std::vector<int> generate_unique_random(int count, int max_value) {
std::vector<int> unique_numbers;
std::unordered_set<int> used_values;
while (unique_numbers.size() < count) {
int random_num = rand() % max_value;
if (used_values.find(random_num) == used_values.end()) {
unique_numbers.push_back(random_num);
used_values.insert(random_num);
}
}
return unique_numbers;
}
int main() {
int num_to_generate = 100;
int max_value = RAND_MAX;
std::vector<int> result = generate_unique_random(num_to_generate, max_value);
for (const auto& num : result) {
std::cout << num << " ";
}
return 0;
}
```
这种算法的时间复杂度大约是 O(count),因为它最多会遍历 `count` 次。不过需要注意的是,`rand()` 的质量对性能有一定影响,如果需要高质量的随机数,可能需要考虑其他第三方库。
阅读全文