Kub*_*lik 6 c++ random math optimization bitset
我正在寻找一种高效的方法来生成std::bitset设定长度的随机性.我也希望能够影响1s出现在结果中的概率,所以如果概率值设置得足够低,所有结果中只有一小部分甚至会包含a 1,但它仍然可能(但不太可能) )导致所有1s.它将用于计算量很大的应用程序中,因此欢迎所有可能的优化.
伯努利分布是单个实验中1或0的概率分布.许多这样的分布式变量的总和

给出一个分布有均值n*p(二项分布)的变量.因此,通过采用由p给出的概率为1的n个 bernoulli分布比特,我们得到大小为n的bitset 和平均设置为1的np比特.当然,如果提供的效率不够,这只是优化下一步的起点.
#include <iostream>
#include <random>
#include <bitset>
template< size_t size>
typename std::bitset<size> random_bitset( double p = 0.5) {
typename std::bitset<size> bits;
std::random_device rd;
std::mt19937 gen( rd());
std::bernoulli_distribution d( p);
for( int n = 0; n < size; ++n) {
bits[ n] = d( gen);
}
return bits;
}
int main()
{
for( int n = 0; n < 10; ++n) {
std::cout << random_bitset<10>( 0.25) << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
1010101001
0001000000
10亿
0110010000
10亿
0000110100
0001000000
0000000000
1000010000
0101010000