boost random library的使用
一、例子
boost random库的文档提供了一个例子,模拟掷色子。投掷一个均匀的色子,六个面每个面出现的概率应该是相等的,也就是说,投掷出的点数应该是服从{ 1 2 3 4 5 6 } 上的均匀分布的。
#include <boost/random.hpp>
#include <boost/random.hpp>
#include <iostream>
int main()
{
boost::mt19937gen;
boost::uniform_int<>dist(1,6);
boost::variate_generator<boost::mt19937&,boost::uniform_int<>>die(gen,dist);
for( int i=0; i<10; ++i) {
std::cout<<die() <<std::endl;
}
}
上面的例子虽然简单,但也可以看出要生成满足一定分布的伪随机数的一般步骤:
首先,我们需要一个伪随机数发生器(generator)。语句
boost::mt19937 gen;
声明了一个mt19937类型的伪随机数发生器gen。boost一共提供了17种类型伪随机发生器供使用者选择,它们是:
minstd_rand, rand48, lrand48, ecuyer1988, kreutzer1986, hellekalek1995, mt11213b, mt19937, lagged_fibonacci 607, lagged_fibonacci1279, lagged_fibonacci2281, lagged_fibonacci3217, lagged_fibonacci4423, lagged_fibonacci9689, lagged_fibonacci19937, lagged_fibonacci23209, lagged_fibonacci44497。
总之,名字是一个比一个丑啊。到底选用何种发生器,需要使用者在性能、质量和内存之间进行权衡,一般的应用的话,boost文档推荐使用mt19937就够了。也可以选择多种发生器,使结果相互印证,从而更可信。
其次,需要一个分布函数。由伪随机数发生器生成的伪随机数一般是一个很大区间上的均匀分布(如[1,2^99999999])。而要产生我们想要的分布的随机数(本例中,我们想要的分布为 {1 2 3 4 5 6 }上的均匀分布),还要对它们做某些变换。
boost::uniform_int<> dist(1, 6);
就是干这个事的。
boost random提供了如下的分布函数:
uniform_smallint ------ 一个整数集上的离散均匀分布
uniform_int ------ 一个整数集上的离散均匀分布
uniform_01 ------ [0, 1)上的连续均匀分布
uniform_real ------ [ min, max)上的连续均匀分布
bernoulli_distribution ------ 伯努利分布
geometric_distribution ------ 几何分布
triangle_distribution ------ 三角分布
exponential_distribution ------ 指数分布
normal_distribution ------ 正态分布
lognormal_distribution ------ 对数正态分布
uniform_on_sphere ------ 球面上的均匀分布
最后,把以上两个结合生成我们想要的随机数发生器:
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(gen, dist);
boost random library的使用的更多相关文章
- 【转】使用Boost Graph library(一)
转自:http://shanzhizi.blog.51cto.com/5066308/942970 本文是一篇译文,来自:http://blog.csdn.net/jjqtony/article/de ...
- Boost Graph Library使用学习
Boost Graph Library,BGL 使用学习 探索 Boost Graph Library https://www.ibm.com/developerworks/cn/aix/librar ...
- Boost随机库的简单使用:Boost.Random(STL通用)
文章目录 文章目录 文章内容介绍 Boost随机库的简单使用 生成一个随机的整数 生成一个区间的平均概率随机数 按概率生成一个区间的随机整数 一些经典的分布 与STL的对比 Ref 文章内容介绍 Bo ...
- Boost Graph Library materials
Needed to compute max flow in a project and found the official document of BGL to be rather obscure, ...
- 【转】使用Boost Graph library(二)
原文转自:http://shanzhizi.blog.51cto.com/5066308/942972 让我们从一个新的图的开始,定义一些属性,然后加入一些带属性的顶点和边.我们将给出所有的代码,这样 ...
- Boost 1.61.0 Library Documentation
http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...
- (五)boost库之随机数random
(五)boost库之随机数random boost库为我们提供了许多的日常随机数生成器: 1.uniform_smallint:在小整数域内的均匀分布 2.uniform_int:在整数域上的均匀分布 ...
- Visulalize Boost Voronoi in OpenSceneGraph
Visulalize Boost Voronoi in OpenSceneGraph eryar@163.com Abstract. One of the important features of ...
- Win7下Boost库的安装
Boost库是C++领域公认的经过千锤百炼的知名C++类库,涉及编程中的方方面面,简单记录一下使用时的安装过程 1.boost库的下载 boost库官网主页:www.boost.org 2.安装 将下 ...
随机推荐
- 初中知识回顾tan,sin,cos关系
如果K=tan, sin 是X x=k/power(1+k*k,0.5) 开平方 cos是y y=1.0/power(1+k*k,0.5) 开平方 gisoracle总结 ============= ...
- 多进程之间的互斥信号量的实现(Linux和windows跨平台)
最近工作中遇到了一些关于文件读取权限的问题.当一个程序中对一个固定名称的文件做了读写的操作的时候,外界通过并发式的调用这个应用的时候,可能存在多个进程同时去操作这个文件,这个时候可能会造成调用失败的问 ...
- SQL优化 | sql执行过长的时间,如何优化?
1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化) 2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合 3. ...
- pycharm2019没有database问题(关于社区版)
原文链接:https://blog.csdn.net/BlacK_CaT_/article/details/53884806网上教程都是直接打开右上角的database,但是我死活也没找到,后来发现应 ...
- ubuntu 上开发.netcore
ubuntu需要安装的软件: 1.sudo apt-get install openssh-server openssh-client 2.sudo apt-get git 3.安装vscode 4. ...
- Qt编写自定义控件34-磁盘容量统计
一.前言 磁盘容量统计控件,说白了,就是用来统计本地盘符占用的容量,包括但不限于已用空间.剩余空间.总大小.已用百分比等,其中对应的百分比采用进度条显示,该进度条的前景色和背景色及文字颜色可以设置,在 ...
- JAVA 基础编程练习题33 【程序 33 杨辉三角】
33 [程序 33 杨辉三角] 题目:打印出杨辉三角形(要求打印出 10 行如下图) 程序分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 package ...
- JAVA 基础编程练习题30 【程序 30 插入数字】
30 [程序 30 插入数字] 题目:有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的 ...
- 【ABAP系列】SAP ABAP BAPI_REQUISITION_CREATE创建采购申请
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP BAPI_RE ...
- 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
[编程开发]opencv实现对Mat中某一列或某一行的元素进行normalization 标签: [编程开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259 ...