0

我有与这里的分布式概率随机数生成器相同的问题,但在 c++ 中。我知道如何实现它,但我的问题是 - 该功能是否在当前版本的 c++ 中构建?

4

1 回答 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 回答