微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重新初始化随机分布

如何解决重新初始化随机分布

期望 的分布在每个下一个数字请求之前重新初始化的行为与初始化一次的行为相同是否合理?换句话说,这样做:

std::default_random_engine generator;
int p[10]={};
for (int i=0; i<nrolls; ++i) {
 std::uniform_int_distribution<int> distribution(0,9);
 int number = distribution(generator);
 ++p[number];
} 

具有相同的分布

std::uniform_int_distribution<int> distribution(0,9);
std::default_random_engine generator;
int p[10]={};
for (int i=0; i<nrolls; ++i) {
 int number = distribution(generator);
 ++p[number];
} 

我已经检查过,对于均匀分布和正态分布,它凭经验是成立的。我可以从 中的每个分布中得到它吗?

解决方法

我基本上做你的第一个实现所做的。每次我需要分发时构建一个。

也就是说,是的,不同分布的行为guaranteed by the standard以特定方式表现。

STL recommends,因为分布相对便宜,所以不必担心每次需要一个或需要一个新范围时都构建一个。他还说如果你不想每次都构造一个,你可以使用 param 成员函数来改变分布范围。

Microsoft Channel9 链接,如果上面的直接 Youtube 链接失效(请在 30 分钟内进入):https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful

编辑

我正在重新观看几年前讨论这个确切问题的 CppCon 演讲。结果?将分布构建为局部变量甚至在循环内 is 4.5 times faster

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。