假设我有一个probabilities = [0.1, 0.2, ..., 0.1, 0.4]
个元素的数组n
。这些是浮点值,而不是整数权重。
如何使用Ansi C中给定的概率从1
到n
中提取随机整数?
probabilities = [0.1, 0.2, 0.1, 0.15, 0.05, 0.1, 0.4]
extract_random_integer(probabilities)
答案 0 :(得分:-1)
生成一个从0到sum of all probabilities
的随机浮点值。
float probabilities[] = [0.1, 0.2, 0.1, 0.15, 0.05, 0.1, 0.4];
float x = 0.0000001+(float)rand()/(float)(RAND_MAX/sum_probabilites);
float temp = 0;
int i=0;
int n = 7;
int number = 0;
for(i=0; i<n; i++)
{
temp+=probabilites[i];
if(x<=temp)
{
number = i+1;
break;
}
}
// int number contains value
主要思想是,您生成一个浮点数,并检查该数字是否属于概率范围。