【问题标题】:Extract number with given probabilities in C [duplicate]在C中提取具有给定概率的数字[重复]
【发布时间】:2019-11-02 05:15:43
【问题描述】:

假设我有一个数组 probabilities = [0.1, 0.2, ..., 0.1, 0.4] n 元素。这些是浮点值,而不是整数权重。

如何使用 Ansi C 中的给定概率从 1n 中提取随机整数?

probabilities = [0.1, 0.2, 0.1, 0.15, 0.05, 0.1, 0.4]
extract_random_integer(probabilities)

【问题讨论】:

  • @Blaze 对此犹豫不决。接受的答案有些适应性,但显然所有其他答案都只有 C++。
  • @Blaze 特别是它在那里工作,因为权重是整数,这些是浮点数。
  • 当然,您可以调整代码以使其与浮点数一起使用。权重的类型实际上并不重要。无论如何,基本问题在某种程度上与语言无关。几乎所有编程语言都在 Stack Overflow 上询问了它的变体,答案基本相同(除非所讨论的语言已经在库中实现了它)。
  • 你是对的,我已经投票决定关闭为重复。我去喝咖啡。

标签: c arrays random probability


【解决方案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

主要思想是生成一个浮点数并检查数字是否属于概率范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 2020-07-20
    • 2014-05-03
    • 2012-10-06
    • 2012-12-04
    • 2021-08-10
    相关资源
    最近更新 更多