清言神力,创作奇迹。接受福利,做篇笔记。
参考资料
0\] 概率论中均值、方差、标准差介绍及C++/OpenCV/Eigen的三种实现. https://blog.csdn.net/fengbingchun/article/details/73323475.
\[4\] C++中的随机数及其在算法竞赛中的使用 - 博客园. https://www.cnblogs.com/cmy-blog/p/random.html.
\[7\] C++随机数--------生成任意范围内等概率随机数"足够好"的做法 - 博客园. https://www.cnblogs.com/wei-li/archive/2012/10/04/2711629.html.
\[16\] c++手写数字识别(贝叶斯分类器) 原创 - CSDN博客. https://blog.csdn.net/m0_57587079/article/details/120773582.
\[18\] 《机器学习》西瓜书第七章贝叶斯分类器- 曹婷婷- 博客园. https://www.cnblogs.com/ttzz/p/11583740.html.
### 引言
概率论作为数学的一个重要分支,研究随机现象及其规律,在计算机科学、人工智能、数据分析等领域有着广泛应用。本报告将深入探讨C++中实现概率论算法的各个方面,包括随机数生成、贝叶斯定理、蒙特卡洛方法以及概率统计量计算等,为读者提供全面的理论基础和实践指导。
### 概率论基础概念
在深入C++实现之前,我们需要理解一些概率论的基本概念,这些概念是构建概率论算法的基础。
#### 随机变量
随机变量是可以随机地取不同值的变量。在概率论中,我们通常研究随机变量的概率分布,包括离散型分布和连续型分布\[[0](https://blog.csdn.net/fengbingchun/article/details/73323475)\]。
#### 概率分布
概率分布描述了随机变量取各个可能值的概率。常见的概率分布包括:
* 离散分布:二项分布、泊松分布、伯努利分布等
* 连续分布:正态分布、均匀分布、指数分布等
#### 期望值、方差与标准差
这些统计量帮助我们理解随机变量的中心趋势和离散程度:
* 期望值:随机变量的平均值
* 方差:随机变量与其期望值之差的平方的期望
* 标准差:方差的平方根,表示数据的离散程度
### C++中的随机数生成
随机数是概率论算法的基础。C++提供了多种生成随机数的方法,从简单的随机数生成到复杂的概率分布模拟。
#### C++标准库中的随机数生成
C++标准库提供了``头文件,包含各种随机数生成器和分布。现代C++推荐使用``而不是旧的`rand()`函数,因为后者存在许多缺陷\[[7](https://www.cnblogs.com/wei-li/archive/2012/10/04/2711629.html)\]。
##### 随机数生成器
随机数生成器是生成随机整数序列的引擎。常见的生成器包括:
* `std::mt19937`:梅森旋转算法,一个常用的伪随机数生成器
* `std::pcg32`:PCG算法,提供更好的统计特性
* `std::random_device`:提供非确定性随机数,通常用于生成种子
##### 概率分布
``头文件提供了多种概率分布,包括:
```cpp
#include
#include
#include
#define int long long
using namespace std;
signed main(void){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
mt19937 gen(random_device{}());//设置随机数生成器
uniform_real_distribution uniform_dist(0.0, 1.0);//均匀分布在[0,1)区间
cout << "Uniform random number: " << uniform_dist(gen) << "\n";
normal_distribution normal_dist(0.0, 1.0);//正态分布,均值0,标准差1
cout << "Normal random number: " << normal_dist(gen) << "\n";
return 0;
}
```
#### 真随机与伪随机
在实现概率论算法时,理解真随机和伪随机的概念非常重要:
* **真随机**:基于物理现象的随机性,如放射性衰变或大气噪声
* **伪随机**:通过确定性算法生成的序列,看起来随机但可预测
C++中的大多数随机数生成都是伪随机的,它们通过某种固定的方法从"种子"运算进而得到随机数\[[4](https://www.cnblogs.com/cmy-blog/p/random.html)\]。
#### Boost库中的高级分布
Boost C++库提供了更多高级的概率分布函数,包括:
* `boost::math::laplace_distribution`:拉普拉斯分布
* `boost::math::geometric_distribution`:几何分布
使用Boost库可以更方便地实现复杂的概率分布:
```cpp
#include
#include
#include
#include
#include