我有与这里的分布式概率随机数生成器相同的问题,但在 c++ 中。我知道如何实现它,但我的问题是 - 该功能是否在当前版本的 c++ 中构建?
问问题
2130 次
1 回答
3
为了完整起见,我将回答这个问题。
可以使用 C++11 的随机数生成库生成此分布。这首先需要播种一个随机数引擎(这里我使用std::mt19937
),然后将该引擎与std::discrete_distribution
随机数分布一起使用。
std::discrete_dstribution
的构造函数采用权重序列或权重序列上的迭代器范围initializer_list
。然后根据权重序列中的相应指标对生成的数字进行加权。也就是说,如果{10, 5, 1}
是 权重,0
将产生10/(10 + 5 + 1) = 0.625
概率,依此类推。
以下代码演示了另一个问题的解决方案:
std::random_device device;
std::mt19937 engine(device()); // Seed the random number engine
std::discrete_distribution<> dist({150, 40, 15, 3}); // Create the distribution
// Now generate values with:
std::cout << (dist(engine) + 1) << std::endl;
于 2013-02-23T11:28:01.787 回答