c++ 数据分布

在 C++ 中,你可以使用 <random> 头文件中的分布器类来实现各种类型的随机数分布。常见的分布器包括均匀分布、正态分布、泊松分布等。这些分布器可以生成符合特定分布规律的随机数序列,以满足不同的应用需求。

下面是一些常见的随机数分布器及其简要介绍:

  1. std::uniform_int_distribution

          生成均匀分布的整数随机数,即在指定的范围内,每个整数值出现的概率相等。
  2. std::uniform_real_distribution

          生成均匀分布的浮点数随机数,即在指定的范围内,每个浮点数值出现的概率相等。
  3. std::normal_distribution

          生成正态分布的随机数,即按照正态分布的规律生成的随机数序列,可以通过指定均值和标准差来调整分布的形状。
  4. std::poisson_distribution

          生成泊松分布的随机数,适用于描述单位时间内事件发生的次数,可以通过指定平均发生率来调整分布的形状。
  5. std::binomial_distribution

         生成二项分布的随机数,适用于描述一系列独立重复的是/非事件,可以通过指定试验次数和成功概率来调整分布的形状。
  6. std::discrete_distribution

          生成离散分布的随机数,即按照指定的离散概率分布生成的随机数序列,可以根据给定的概率分布来生成随机数。

1. 正态分布示例:

#include <iostream>
#include <random>

int main() {
    // 创建一个 random_device 对象用于生成随机种子
    std::random_device rd;

    // 使用随机种子初始化一个默认随机数引擎
    std::mt19937 gen(rd());

    // 创建一个正态分布的随机数分布器,均值为 50,标准差为 10
    std::normal_distribution<double> dis(50.0, 10.0);

    // 生成随机数并输出
    for (int i = 0; i < 10; ++i) {
        double random_num = dis(gen);
        std::cout << "Random number: " << random_num << std::endl;
    }

    return 0;
}

2.  泊松分布示例:

#include <iostream>
#include <random>

int main() {
    // 创建一个 random_device 对象用于生成随机种子
    std::random_device rd;

    // 使用随机种子初始化一个默认随机数引擎
    std::mt19937 gen(rd());

    // 创建一个泊松分布的随机数分布器,平均发生率为 5
    std::poisson_distribution<int> dis(5);

    // 生成随机数并输出
    for (int i = 0; i < 10; ++i) {
        int random_num = dis(gen);
        std::cout << "Random number: " << random_num << std::endl;
    }

    return 0;
}

3. 均匀分布

#include <iostream>
#include <random>

int main() {
    // 创建一个 random_device 对象用于生成随机种子
    std::random_device rd;

    // 使用随机种子初始化一个默认随机数引擎
    std::mt19937 gen(rd());

    // 创建一个均匀分布的整数随机数分布器,范围是 [min, max]
    int min = 1;
    int max = 100;
    std::uniform_int_distribution<int> dis(min, max);

    // 生成随机数并输出
    for (int i = 0; i < 10; ++i) {
        int random_num = dis(gen);
        std::cout << "Random number: " << random_num << std::endl;
    }

    return 0;
}

4. 二项分布

#include <iostream>
#include <random>

int main() {
    // 创建一个 random_device 对象用于生成随机种子
    std::random_device rd;

    // 使用随机种子初始化一个默认随机数引擎
    std::mt19937 gen(rd());

    // 设置二项分布的参数
    int n = 10; // 试验次数
    double p = 0.5; // 每次试验成功的概率

    // 创建一个二项分布的随机数分布器
    std::binomial_distribution<int> dis(n, p);

    // 生成随机数并输出
    for (int i = 0; i < 10; ++i) {
        int random_num = dis(gen);
        std::cout << "Random number: " << random_num << std::endl;
    }

    return 0;
}

5.  生成均匀分布的实数随机数

std::uniform_real_distribution 是 C++ 标准库中的一个随机数分布器类,用于生成均匀分布的实数随机数。其使用方法与 std::uniform_int_distribution 类似,不同之处在于它生成的是浮点数而不是整数。该分布器生成的随机数范围是半开区间 [a,b)[a,b),其中 aa 是最小值,bb 是最大值。

#include <iostream>
#include <random>

int main() {
    // 创建一个 random_device 对象用于生成随机种子
    std::random_device rd;

    // 使用随机种子初始化一个默认随机数引擎
    std::mt19937 gen(rd());

    // 设置均匀分布的参数
    double min = 0.0;
    double max = 1.0;

    // 创建一个均匀分布的实数随机数分布器,范围是 [min, max)
    std::uniform_real_distribution<double> dis(min, max);

    // 生成随机数并输出
    for (int i = 0; i < 10; ++i) {
        double random_num = dis(gen);
        std::cout << "Random number: " << random_num << std::endl;
    }

    return 0;
}

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值