【问题标题】:random function which generates 1 or 0 with given probability [closed]以给定概率生成 1 或 0 的随机函数
【发布时间】:2013-04-21 18:30:49
【问题描述】:

我需要实现一个函数 int myRand(double p) 返回1或0。返回1的概率是p,而返回0的概率是1- p

【问题讨论】:

  • 是什么阻止你这样做?
  • 你可以使用任何库吗?
  • 在我看来,这个问题不是模棱两可的,不是含糊的,不是不完整的,不是修辞的。在我看来,这只是一个“做我的功课”的问题。我无法回答,因为该问题目前已关闭。雅科夫的提示是看一下 C++11 中的 std::bernoulli_distribution en.cppreference.com/w/cpp/numeric/random/bernoulli_distribution

标签: c++ random probability


【解决方案1】:

您可以为此使用std::discrete_distribution

#include <random>

double p = 0.25;

std::random_device rd;
std::mt19937 gen(rd());
std::discrete_distribution<> distrib({ 1-p, p });
                                    // ^^^  ^- probability for 1
                                    //  | probability for 0
std::cout << distrib(gen);

【讨论】:

    【解决方案2】:

    Generate a random double in the range [0..1],然后这样做:

    int randomWithProb(double p) {
        double rndDouble = (double)rand() / RAND_MAX;
        return rndDouble > p;
    }
    

    【讨论】:

      【解决方案3】:

      您只需要从 [0,1] 生成一个随机浮点数。如果 >p 则返回 1,否则返回 0。

      【讨论】:

      • 这是不正确的。它将分别返回概率为 1 和 (1-p) 的 0 或 1。这是对所要求内容的补充。
      猜你喜欢
      • 2016-01-06
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2021-08-27
      • 2017-03-24
      • 2017-10-01
      相关资源
      最近更新 更多