繁体   English   中英

C ++ - 生成具有可配置平均“1s到0s”比率的随机位集的有效方法

[英]C++ - Efficient way to generate random bitset with configurable mean “1s to 0s” ratio

我正在寻找一种高效的方法来生成设定长度的随机std::bitset 我也希望能够影响结果出现1秒的概率,所以如果概率值设置得足够低,所有结果中只有一小部分甚至会包含1 ,但它仍然可能(但是非常不可能)导致所有1秒。 它将用于计算量很大的应用程序中,因此欢迎所有可能的优化。

伯努利分布是单个实验中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;
    }
}

结果:

1010101001

0001000000

10亿

0110010000

10亿

0000110100

0001000000

0000000000

1000010000

0101010000

http://ideone.com/p29Pbz

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM