随机化Tricks
参阅:
https://zh.cppreference.com/w/cpp/numeric/random
https://zh.cppreference.com/w/cpp/header/random
- 使用
random_device
[1]作为种子
Code:
// C++11
#include<cstdio>
#include<random>
#include<chrono>
using namespace std;
#define clock() (chrono::steady_clock::now())
const int n=1e7;
int a[11];
int main() {
mt19937 rnd(random_device{}());
uniform_int_distribution<int> int_dist(1,10); // 整数
uniform_real_distribution<double> real_dist(1,10); // 实数
printf("%d %lf\n",int_dist(rnd),real_dist(rnd));
auto st=clock();
for(int i=1; i<=n; ++i)
++a[int_dist(rnd)];
printf("int_dist costed time: %.3lfs\n",chrono::duration<double>(clock()-st).count());
for(int i=1; i<=10; ++i)
printf("%d%c",a[i]," \n"[i==10]);
st=clock();
for(int i=1; i<=n; ++i)
real_dist(rnd);
printf("real_dist costed time: %.3lfs\n",chrono::duration<double>(clock()-st).count());
return 0;
}
A possible output:
7 6.686022
int_dist costed time: 0.130s
1001752 997709 1000564 1000381 999916 997915 1000190 999793 999096 1002684
real_dist costed time: 0.270s
附:mt19937的常用成员函数
-
构造函数:
-
mt19937()
:默认构造函数,使用默认的种子初始化随机数引擎。 -
mt19937(unsigned int seed)
:使用指定的种子初始化随机数引擎。
-
-
种子操作函数:
-
seed()
:设置种子值为默认值。 -
seed(unsigned int seed)
:设置新的种子值。
-
-
随机数生成函数:
operator()
:生成一个32位的随机整数。
-
辅助函数:
-
discard(unsigned long long z)
:等同于执行z次operator(),以丢弃z次生成的随机数。 -
min()
:获取可生成的最小随机数值。 -
max()
:获取可生成的最大随机数值。
-
本文来自博客园,作者:lnw143,转载请注明原文链接:https://www.cnblogs.com/lnw143/p/17897211.html