首页 > 后端开发 > C++ > Boost的随机数生成器如何用于加权随机数选择?

Boost的随机数生成器如何用于加权随机数选择?

Linda Hamilton
发布: 2024-12-15 20:43:13
原创
493 人浏览过

How Can Boost's Random Number Generator Be Used for Weighted Random Number Selection?

加权随机数生成

选择具有特定概率的随机数是编程中的常见任务。 Boost 的随机数生成器提供了一种方便的方法来选择具有加权概率的项目。

考虑一下您想要选择具有以下权重的 1 到 3 之间的随机数的场景:

  • 1: 90%
  • 2: 56%
  • 3: 4%

算法

Boost 没有内置的加权随机数生成功能。不过,可以应用一个简单的算法:

  1. 计算总重量:将所有项目的重量相加。
  2. 生成一个随机数: 选择 0 到总数之间的随机数重量。
  3. 迭代权重:遍历每个项目的重量,从随机数中减去它,直到该数字小于当前项目的重量。
  4. 返回 Item: 随机数变为负数的位置对应的 item 为选中item.

代码示例

在 Boost 中,使用 random_device 和 mt19937 随机数生成器:

std::mt19937 rng(std::random_device{}());
int total_weight = 90 + 56 + 4;
for (int i = 0; i < total_weight; i++) {
    int random_number = rng() % total_weight;
    int current_weight = 90;
    if (random_number < current_weight) {
        return 1;
    }
    current_weight += 56;
    if (random_number < current_weight) {
        return 2;
    }
    return 3; // Reached the end of the weights
}
登录后复制

优化

如果体重很少变化并且随机选择很频繁,可以通过存储每个项目的累积权重总和来应用优化。这允许更有效的二分搜索方法。

此外,如果项目数量未知但权重已知,则可以采用水库采样来生成加权随机数。

以上是Boost的随机数生成器如何用于加权随机数选择?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板