用于从每个元素具有不同概率的列表中进行选择的 C++ 函数

标签 c++ random probability

我有一个结构数组,结构中的一个字段是一个 float 。我想选择其中一个结构,其中选择它的概率与 float 的值有关。即

struct s{
  float probability;
  ...
}

s sArray[50];

决定选择哪个 s 的最快方法是什么?有这个功能吗?如果我知道所有概率字段的总和(注意它不会是 1),那么我可以遍历每个 s 并将 probability/total_probability 与随机数进行比较,更改每个 s 的随机数?即

if( (float) (rand() / RAND_MAX) < probability)...

最佳答案

float p = (rand() / static_cast<float>(RAND_MAX)) * total_probability;
s* current = &sArray[0];
while ( (p -= current->probability) > 0)
    ++current;
// `current` now points to your chosen target

关于用于从每个元素具有不同概率的列表中进行选择的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649717/

相关文章:

c++ - boost ASIO 和 co_await- 与任何第三方回调一起使用?

c++ - 在cygwin中使用mingw编译器编译c++程序时缺少dll

python - 我如何生成 100 个网格 map ?

apache-spark - Spark MLLib SVM 输出的分数意味着什么?

algorithm - 子序列的概率计算和算法

c++ - #ifdef标志来说明gcc和g++编译器之间的区别?

c++ - 一元 '*' 的无效类型参数(有双)

python - 加速scipy自定义连续随机变量

c++ - CURAND_STATUS_LAUNCH_FAILURE + CUDA 7.5

java - 蒙蒂霍尔游戏