c++ - 在 C++ 中生成具有相等概率的随机数
问题描述
例如,范围对数组 p={[23, 28], [11, 14], [31, 39]}
您必须返回随机数,以便该数字应为:
- 在这些对中的任何一对
- 这些范围内的每个数字都应该具有相同的被选中概率。
我可以很容易地生成一个随机数,它位于任何这些区间之间,比如
int x=(rand()%(p[i].second-p[i].first) )+ p[i].first;
如何生成一个随机数,该随机数可以位于数组中的任何间隔中,并且概率也相等。
解决方案
在 [0, 18] 范围内均匀地绘制一个数字。
添加11。
如果该数字为 15 或更多,则添加 8。
如果该数字为 29 或更多,则加 2。
这种方法的优点是它只使用一张图纸。使用多个绘图可能会导致随机数的统计属性恶化,具体取决于底层生成器的属性。带有拒绝的抽样可能会导致一些低差异序列出现问题,例如 Sobol。
推荐阅读
- angular - 如何从 Angular 9 中的组件访问服务类中定义的变量?
- tensorflow - 这个张量流代码的 Pytorch sub 是什么?
- r - ggplot2在编织时不打印字体,但以块的形式显示
- git - GCP/JupyterHub 中的本地开发和远程部署
- java - 带有 @query 的 Spring 规范
- jdbc - Kafka-Connect JDBC Sink 在 upsert 期间报告 null id
- java - 在物理设备上成功启动活动后,应用程序会立即停止。NetworkOnMainThreadException
- mysql - SQL - 难以连接表和使用聚合函数的特定日期标准
- angular - 执行子组件Angular的一个功能
- android - Android 特定动画 Xamarin.Forms - 启动画面