9

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

struct s{
  float probability;
  ...
}

s sArray[50];

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

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

2 回答 2

11
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
于 2010-04-15T23:52:47.520 回答
3

如你所说,找出 RAND_MAX。生成一个最大为 RAND_MAX 的随机数。遍历数组计算概率,直到等于或超过生成的随机数。(只有 50 个元素的性能应该不是问题,否则将概率的总和存储在另一个数组中,然后对随机值进行二等分搜索。)

于 2010-04-15T23:49:13.483 回答