我有一个结构数组,结构中的一个字段是一个浮点数。我想选择一个结构,其中拾取它的概率是相对于浮点数的值。即
struct s{
float probability;
...
}
s sArray[50];
决定选择哪个s的最快方法是什么?这有功能吗?如果我知道所有概率字段的总和(注意它不会是1),那么我可以迭代每个s并将probability/total_probability
与随机数进行比较,改变每个s的随机数吗?即
if( (float) (rand() / RAND_MAX) < probability)...
答案 0 :(得分:9)
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
答案 1 :(得分:3)
按照你的说法找出RAND_MAX。 生成最多RAND_MAX的随机数。 迭代数组计算概率,直到等于或超过生成的随机数。 (只有50个元素的性能不应该是一个问题,否则将概率的总和存储在另一个数组中,然后对其进行二分搜索。)