偏向随机数生成

时间:2019-08-31 22:14:35

标签: c++ math

我想生成从-1到某个值k的随机整数。但是我想以-1的概率超过70%的方式来做。例如:- -1 2 -1 -1 6 -1 -1。 我这样做是为了对我的代码进行暴力测试。

2 个答案:

答案 0 :(得分:2)

这应该做。如果生成的随机数介于0到100之间,并且小于概率(在本例中为n),则getProb返回true,并且您的值为-1。 否则,只需生成另一个以k为模的随机数

#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <vector>
using namespace std;

bool getProb(int n) {
    return (rand() % 101) < n;
}

int main() {
    srand(time(NULL));
    int probab = 75;
    int k = 10;
    vector<int> res;
    for (int i = 0; i < 100; i++) {
        if (getProb(probab)) res.push_back(-1);
        else res.push_back(rand() % k);
    }
}

答案 1 :(得分:0)

这是使用<random>的简短方法。

#include <random>

int biased_rand(int k, int prob)
{
    static std::random_device rd;
    static std::uniform_int_distribution<int> dist_prob(0, 100);

    if (dist_prob(rd) <= prob)
        return -1;

    return std::uniform_int_distribution<int>(0, k)(rd);
}