C++离散均匀分布
1、c++中使用离散均匀分布可以引用这个有文件
#include <random>
2、在使用std::uniform_int_distribution类模板构造一个分布对象。
static constexpr int __MIN_CNT__ = 200;
std::uniform_int_distribution<> randomer(0, __MIN_CNT__ - 1); // 构造0到200的离散均匀分布
3、构建随机的engine
这里的e_需要一个随机初始化的种子,可以用时间,也可以使用其他的。
// 用时间初始化
#include <ctime>
std::default_random_engine e_(time(NULL));
// 使用 random_device初始化随机数生成器
std::random_device rd; // Non-deterministic seed source
std::default_random_engine e_{rd()}; // Create random number generator
4、随机获取其中的一个值
int random_value = randomer(e_);
5. 使用param方法重新设置离散分布的范围
using Range = std::uniform_int_distribution<>::param_type;
randomer.param(Range{-5, 5}); //生成-5到5的离散均匀分布
5.1 保存范围
这里还是使用param()方法
auto old_rng = randomer.param();
其他用法
获取这个区间的最大值
std::cout << "Range from 0 to "<< std::numeric_limits<std::uniform_int_distribution<> :: result_type>::max()<<std::endl;
范围的上边界和下边界可由a() 和 b()获得,它们可以分别返回范围的下边界和上边。
randomer.a();
randomer.b();
tips
这里还有其他的分布函数比如伯努利分布等
explicit bernoulli_distribution(const param_type& _Par0);//伯努利分布
// CLASS TEMPLATE geometric_distribution
template <class _Ty = int>
class geometric_distribution {// ...} // 几何分布
// CLASS TEMPLATE poisson_distribution AND HELPER
template <class _Ty = int>
class _Small_poisson_distribution { // poisson distribution with small mean};
还有许多分布,可以自行查看源文件