c++ - 有偏随机数生成
问题描述
我想生成从-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);
}
}
推荐阅读
- postgresql - PostgreSQL 升级到 12+ 将哈希连接更改为慢速嵌套循环
- c++ - 从异构大括号初始值设定项列表创建树
- python - 记录 - 如何将相同的记录器用作不同文件的类?
- excel - Excel `Data Levels` 以百万为单位的格式,没有十进制值 - Macbook
- c - 指向 char 和 printf 的指针
- python - 在 ubuntu 18.04 中安装系统范围的模块
- java - 当tomcat从tomcat 7升级到tomcat 9时,Drools ClassCastException
- java - 通过特定路由将 Java 客户端连接到 Node Express 服务器
- session - 带有用户信息的 Kong API 网关会话插件
- firebase - 解决 PlatformException (PlatformException(user-not-found)) Firebase