C++11 随机数生成器
背景
考试想造浮点数然后发现不会
正好下午被虎哥茶话会
谈到了一些不会的问题balabala的
被告知\(C++11\)有些神奇特性(哦豁)
然后就学习了一手看上去没什么用的随机数生成器\(QwQ\)
random_device
标准库提供了一个非确定性随机数生成设备
在\(Linux\)的实现中,是读取\(/dev/urandom\)设备
random_device提供()操作符,用来返回一个min()到max()之间的一个数字
如果是\(Linux(Unix Like或者Unix)\)下,都可以使用这个来产生高质量的随机数,可以理解为真随机数
(以上都是废话,其实和最原始的c++的rand()用法一样,不过真随机数好评)
#include <iostream>
#include <random>
using namespace std;
signed main(){
random_device rand;
cout << rand() << endl;
return 0;
}
default_random_engine
一个随机化的前置引擎
给后面要用到的函数生成一个随机节点(时间戳balabala随便理解一下就好,并没有什么卵用,就是让后面的函数随机化更强)
和上面提到的\(random_device\)不同的是,这个需要提供时间种子,看上去和rand也没什么区别。。。
#include <iostream>
#include <random>
using namespace std;
signed main(){
default_random_engine rand(time(NULL));
cout << rand() << endl;
return 0;
}
uniform_int_distribution
好了干货来了
该函数的作用是生成一个[a,b]范围内的整数
定义的时候传进去相应的参数(数据范围即可)
uniform_int_distribution<int> rand1(-100, 100);
调用的时候给时间种子(就是上面device写的rand函数)
cout << rand1(rand) << " ";
uniform_real_distribution
最有用的东西还是这个实数域的随机生成器
用法和上述int一样
uniform_real_distribution<double> rand2(0.0, 1.0);
cout << rand2(rand) << endl;
正态分布normal_distribution
再来说一个常用的
正态分布
正态分布\(N(μ,σ^2)\)呈现经典的”钟形曲线”的形状,其中中心峰的\(x\)坐标由\(μ\)给出,峰的宽度受\(σ\)控制。
正态分布由两个参数控制,\(μ∈R\)和\(σ∈(0,∞)\)
分布的标准差用\(σ\)表示,方差用\(σ^2\)表示
使用方法,第一个参数是\(μ\),第二个是\(σ\)
normal_distribution<double> N(10.0, 5.0);
为了方便直观的看出数据分布,把每次生成的数据出现次数+1,测试的时候输出了数据分布图像
for(register int i = 0; i < 10000; i++){
double num = nor(rand);
if ((num >= 0.0) && (num < 20.0)) ++p[int(num)];
}
for (int i = 0; i < 20; ++i) {
cout << i << "-" << (i + 1) << ": ";
cout << string(p[i] * 100 / 10000, '*') << endl;
}
具体要求按照具体题目要求,修改参数即可
Code
最后把代码粘贴一下,有需要自取就好
#include <iostream>
#include <random>
using namespace std;
int p[1000];
signed main(){
default_random_engine rand(time(NULL));
uniform_int_distribution<int> rand1(-100, 100);
uniform_real_distribution<double> rand2(0.0, 1.0);
cout << rand() << " ";
cout << rand1(rand) << " ";
cout << rand2(rand) << endl;
normal_distribution<double> nor(10.0, 5.0);
for(register int i = 0; i < 10000; i++){
double num = nor(rand);
if ((num >= 0.0) && (num < 20.0)) ++p[int(num)];
}
for (int i = 0; i < 20; ++i) {
cout << i << "-" << (i + 1) << ": ";
cout << std::string(p[i] * 100 / 10000, '*') << std::endl;
}
return 0;
}
小结
目前常用的这些吧
如果后续再有需求再补充v吧
C++11 随机数生成器的更多相关文章
- BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘
题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...
- [BZOJ3671][UOJ#6][NOI2014]随机数生成器
[BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...
- NOI2014 随机数生成器
随机数生成器 [问题描述] 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的 ...
- Linux下对拍脚本与随机数生成器
对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > .in #运行数据生成器,将数据输出到1.in ./st ...
- 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 栋 ...
- BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )
矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...
- Swift - 产生不重复数字的随机数生成器
在Swift中,可以使用函数类型的参数,也可以使用函数类型的返回值.而作为返回值的函数,还能“捕获”外部的值,并多次使用它.这个特性,常可用来创建各种生成器. 下面通过创建一个“随机数生成器函数”作为 ...
- 【矩阵乘】【NOI 2012】【cogs963】随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对照 时间限制:1 s 内存限制:128 MB **[问题描写叙述] 栋栋近期迷 ...
- 【BZOJ2875】随机数生成器(矩阵快速幂)
[BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...
随机推荐
- JavaScript学习系列博客_17_JavaScript中的函数的参数、返回值
数的形参(形式参数) - 定义函数时,可以在()中定义一个或多个形参,形参之间使用英文逗号隔开:定义形参就相当于在函数内声明了对应的变量但是并不赋值,形参会在调用时才赋值. 函数的实参(实际参数) - ...
- webpack 热替换
一. 使用express.js搭建一个简易服务器demo地址,热替换的 先看包 // 清除重复的文件 "clean-webpack-plugin" // css加载器 " ...
- mysql 1215错误 外键建立失败
在Mysql中创建数据表时,经常会遇到问题而失败,其中建立外键有很多细节需要我们去留意,主要有以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个是int(10),那么外键也必 ...
- Spring MVC 的运行流程
1.用户发送请求到DispatcherServlet 2.DispatcherServlet调用处理器映射器(HanderMapping)找到处理器 3.处理器映射器(HanderMapping)返回 ...
- A neural reinforcement learning model for tasks with unknown time delays
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 我们提出了一个基于生物学的神经模型,能够在复杂的任务中执行强化学习.该模型的独特之处在于,它能够在一个动作.状态转换和奖 ...
- Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存
接上一篇 Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开始学会添加一个全 ...
- react+antd的todolist开发
使用localStorage缓存在cookie里刷新不会充重置 参考链接 create-react-app入门教程https://www.jianshu.com/p/77bf3944b0f4 http ...
- vagrant安装的坑
关于VAGRANT安装过程的坑 标签: 虚拟化 闲来无聊 试试vagrant虚拟化技术 安装过程中坑太多了 所以记录下方便以后 注意: 执行 vagrant up 命令报错 如下 PS F ...
- Python 批量下载BiliBili视频 打包成软件
文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...
- 初级知识点二——C#值传递
C#中有值传递和引用传递,这个东西一直有点儿绕,今天花点儿时间来把这个事情搞清楚. 传递值类型的参数 值类型的变量,是直接包含其数据的.实际上,在向方法传递一个值类型变量,其实就意味着向方法传递了一个 ...