boost库之Random
来源:互联网 发布:苹果cms手机模板破解版 编辑:程序博客网 时间:2024/05/21 11:08
Random 随机数
在很多应用中都需要使用随机数。本库力求提供一个高效的,通用的随机数库。boost库有多种随机数生成方式。先熟悉一下各种随机数生成器的概念。
数字生成器(Number Generator)
它是一个函数对象,没有参数。类似于常见的rand( )。
均匀随机数生成器(Uniform Random Number Generator)
在一个范围内生成随机数,有强下界和强上界。一个例外是对于小数没有强上界,即v.min() <= x < v.max(),这主要是为了考虑形如[0,1)这类随机数。
不确定均匀随机数生成器(Non-deterministric Uniform Random Number Generator)
原话是:“一个不确定均匀随机数生成器是一个 UniformRandomNumberGener
伪随机数生成器(Pseudo-random Number Generator)
这是一种Uniform Random Number Generator,使用了某些线性算法。通常需要提供seed。
随机分布(Random Distrubution)
随机分布取均匀分布的随机值作为输入,输出符合某一分布的随机数。
头文件 <boost/random.hpp>
variate_generator 类模板
变种生成器用来组合随机数生成器和随机分布。关于生成器和分布,boost库提供了很多现成的。
概要:
template<class Engine, class Distribution>
class variate_generator
{
public:
typedef Engine engine_type;
typedef Distribution distribution_type;
typedef typename Distribution::result_type result_type;
variate_generator(Engine e, Distribution d);
result_type operator()();
template<class T>
result_type operator()(T value);
engine_value_type& engine();
const engine_value_type& engine() const;
result_type min() const;
result_type max() const;
};
比较迷惑人的是两个operator( )。
生成器
看到库后,发现有太多的生成器。每种生成器有不同的性质,内存要求,速度等。做为一个非专业人士,我不知道如何选择。库的说明文档中指出,如果不清楚如何选择,就使用mt19937,好吧,我就用mt19937了。
这里所有的生成器都是,typedef 进行专门化来给出的,封装在 boost::random 名字空间中。例如:
typedef random::mersenne_twister< > mt19937;
用法:
for(int i = 0; i < 10; i++)
分布
讲到分布,这个数学知识就更深了。我从手册上copy一份表格吧.
分布
描述
实例
uniform_smallint
在小整数集 (远小于内部生成器的值域) 上的离散均匀分布
罐中取物
uniform_int
在整数集上的离散均匀分布;可能会多次调用内部生成器以获得足够多的“随机性”
罐中取物
uniform_01
区间 [0,1) 上的连续均匀分布;此分布是其它分布的重要基础
-
uniform_real
实数区间 [min, max) 上的连续均匀分布
随机投下一木棍,其偏转角的弧度数是 [0, 2pi) 上的这种分布 (假设偏转角的分布是均匀的)
bernoulli_distribution
伯努利试验 (Bernoulli experiment):布尔离散分布,概率可配置
投掷硬币 (p=0.5)
geometric_distribution
几何分布:重复伯努利试验,直到出现某一结果的试验次数
抛掷骰子,记录“6”首次出现时的试验次数
triangle_distribution
?
?
exponential_distribution
指数分布
放射性物质发射 alpha 粒子的间隔时间
normal_distribution
无穷次重复伯努利试验的结果计数
投掷硬币 10000 次,记录正面出现的次数
lognormal_distribution
对数正态分布 (lognormal distribution) (有时用于模拟)
流水线工人的工作完成时间
uniform_on_sphere
任意给定维数空间的单位球面上的均匀分布
在地球 (近似看作是球体) 表面任选一点去旅游
【转自:http://blog.sina.com.cn/s/blog_67b9b8d00100qm73.html】
- boost库之Random
- (五)boost库之随机数random
- boost的random库
- boost::random
- python学习之random库
- boost random library的使用
- boost库之format
- boost库之date
- boost库之scoped_ptr
- boost库之scoped_array
- boost库之shared_ptr
- boost库之shared_ptr
- Boost之Smart_ptr库
- boost库之geometry
- boost库之function
- boost库之uuid
- boost库之program_options
- Boost库之Program_options
- JILK - CPU - (2)
- ubuntu sudo不用输入密码方法
- 悼念512汶川大地震遇难同胞——来生一起走+prime质数表+母函数
- 在Android Settings.apk中新增到其他APK的链接
- 好的开源项目记录
- boost库之Random
- 古城钟楼微博:葡萄城程序员演练技术的产物
- cocos2d-x 2.x 精灵的创建
- 收集了经常被问到的关于memcached的问题
- 将ROM改为默认开启调试模式和未知源,默认关闭GPS
- C++多线程编程学习
- 虚拟机linux下修改分辨率以及将鼠标任意移入移出虚拟机
- kernel panic
- ARM处理器异常与中断处理 学习总结