c++提供的不同分布的随机算法
时间: 2023-08-13 17:05:58 浏览: 47
C++标准库提供了多个随机数分布模板,它们可以根据不同的分布生成随机数。这些分布模板包括:
1. 均匀分布(uniform distribution)
在指定的区间内生成均匀分布的随机数。
```c++
std::uniform_int_distribution<> dis(1, 100); // 生成1~100之间的均匀分布整数
std::uniform_real_distribution<> dis(0.0, 1.0); // 生成0.0~1.0之间的均匀分布实数
```
2. 正态分布(normal distribution)
生成符合正态分布的随机数。
```c++
std::normal_distribution<> dis(0.0, 1.0); // 生成符合均值为0,标准差为1的正态分布随机数
```
3. 伽马分布(gamma distribution)
生成符合伽马分布的随机数。
```c++
std::gamma_distribution<> dis(2.0, 1.0); // 生成符合形状参数为2,尺度参数为1的伽马分布随机数
```
4. 泊松分布(Poisson distribution)
生成符合泊松分布的随机数。
```c++
std::poisson_distribution<> dis(1.0); // 生成符合平均值为1的泊松分布随机数
```
5. 二项分布(binomial distribution)
生成符合二项分布的随机数。
```c++
std::binomial_distribution<> dis(10, 0.5); // 生成符合n=10,p=0.5的二项分布随机数
```
6. 几何分布(geometric distribution)
生成符合几何分布的随机数。
```c++
std::geometric_distribution<> dis(0.5); // 生成符合p=0.5的几何分布随机数
```
7. 负二项分布(negative binomial distribution)
生成符合负二项分布的随机数。
```c++
std::negative_binomial_distribution<> dis(10, 0.5); // 生成符合r=10,p=0.5的负二项分布随机数
```
示例代码:
```c++
#include <iostream>
#include <random>
int main()
{
std::random_device rd; // 用于获取真随机数种子
std::mt19937 gen(rd()); // 使用梅森旋转算法的伪随机数引擎
std::uniform_real_distribution<> dis(0.0, 1.0); // 生成0.0~1.0之间的均匀分布实数
for (int i = 0; i < 10; ++i) {
std::cout << dis(gen) << ' ';
}
return 0;
}
```