一次我需要有比别人高probabality至少两个数的随机数发生器。
即,例如:序列1000中随机1→10。数字A = 3和B = 7。
A - 应重复约。至少20%的时间。 B - 应重复约。至少有30%的时间。
这应该覆盖1000序列的至少50%。 A和B的插入本身也应该有些可能/随机。不只是每第N步添加A和B.不需要全部/精确控制。
任何想法?
我是noob-C++风格的代码将不胜感激!
一次我需要有比别人高probabality至少两个数的随机数发生器。
即,例如:序列1000中随机1→10。数字A = 3和B = 7。
A - 应重复约。至少20%的时间。 B - 应重复约。至少有30%的时间。
这应该覆盖1000序列的至少50%。 A和B的插入本身也应该有些可能/随机。不只是每第N步添加A和B.不需要全部/精确控制。
任何想法?
我是noob-C++风格的代码将不胜感激!
可以这样做的一种方法是随机生成一个介于0.0和1.0之间的数字,并根据该数字选择要生成的数字。例如,为了实现你示例场景(伪代码):
let "result" be an array of 1000 integers
let "i" be an integer
for i = 1 to 1000:
let "j" be a random number between 0.0 and 1.0
if j < 0.2:
let result[i] be 3
else if j < 0.5:
let result[i] be 7
else:
let "k" be an integer
do, while k = 3 or k = 7:
let "k" be a random number in the range 1 to 10
let result[i] be k
end
基本上,j
用于范围为1分区至10分为三个部分 - 一个部分覆盖从0%到该范围的20%(第一if
),第二个覆盖范围从20%到50%(即30%宽,第二个if
),最后覆盖剩余的50%。根据我们随机落入的部分,我们选择合适的数字进行生成。
你应该使用<random>
这个库。
#include <random>
#include <iostream>
#include <algorithm>
#include <iterator>
int main() {
// create a discrete distribution where the third object has 20% probability and
// the seventh has 30%
std::vector<double> probabilities(10, 5.0/8.0);
probabilities[2] = 2.0;
probabilities[6] = 3.0;
std::discrete_distribution<int> dist(begin(probabilities),end(probabilities));
// our underlying source of randomness
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
std::mt19937 eng(seed);
// create a function object that uses the distribution and source of randomness to
// produce values from 1 to 10
auto rand = [&]{ return dist(eng) + 1; };
std::vector<int> x;
// store 1000 random values
for (int i=0;i<1000;++i)
x.push_back(rand());
// count how many of each value, to verify that 3 comes out ~200 times and 7 comes
// out ~300 times
for (int i=1;i<=10;++i)
std::cout << i << ": " << count(begin(x),end(x),i) << '\n';
// print all the values
copy(begin(x),end(x),std::ostream_iterator<int>(std::cout, " "));
}
这仍然取决于原始的随机生成器。也忘记了更具体。它用于Arpregiator--用于音乐合成器。说数值是数组[24](这是音乐中的两个八度音,分布映射会将数值聚集得太接近给定点 - A和B在我的情况中.A和B应该有概率(整数),其余应该是随机(整数) –
对不起,刚刚阅读您的回复更新 - 应该工作。谢谢! –