有偏差的随机数生成

Biased random number generation

本文关键字:随机数      更新时间:2023-10-16

我想生成从-1到某个值k的随机整数。但我想以一种获得 -1 的概率高于 70% 的方式做到这一点。例如:- -1 2 -1 -1 6 -1 -1. 我这样做是为了针对蛮力方法测试我的代码。

这应该可以。如果您生成一个介于 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);
}
}

这是使用<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);
}