欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

概率论的起源

程序员文章站 2024-03-25 20:53:22
...

 


随机现象

在我们的世界里,有些现象是确定的。

比如,往空中扔一个石头必然会落回地面,这叫作 \color{Salmon}{确定性现象}

也有不确定的现象,比如骰子:

概率论的起源
虽然充满不确定性,但结果又有迹可循:

  • 假设是六面骰子,必然是 1、2、3、4、5、6 中的一个。
  • 其次,反复抛掷的话,会发现每个点数的出现又是有规律的。

这种不确定的,但又有规律可言的现象称为 \color{Salmon}{随机现象}。正因为随机现象的存在,才有了概率论这门学科。

但爱因斯坦不喜欢概率论,因为TA认为万物是确定的,而不是不确定的。

 


赌注分配

有一个故事:
概率论的起源
那么,看了这个故事后您觉得该怎么分 ?

概率论的起源

假设赢了 4 局的赌徒再赢 1 局的概率为 12\frac{1}{2},只需要再赢 1 局就可以拿走全部的????,而如果输了则是 4:4,输了后如果再赢一局还是可以拿走全部的????。

赢了 4 局的赌徒有 3 种概率:

  • 121\frac{1}{2}*1 的概率直接获取全部的????;
  • 输一局后赢, 12121\frac{1}{2}*\frac{1}{2}*1 的概率拿走全部的????;
  • 连输俩局, 12120\frac{1}{2}*\frac{1}{2}*0 的概率拿走全部的????。

赢了 4 局的赌徒: 12+14=34\frac{1}{2}+\frac{1}{4} = \frac{3}{4},赢了 3 局的赌徒: 134=141-\frac{3}{4}=\frac{1}{4}

引出期望,E(X)=i=1nxip(xi)E(X) = \sum_{i=1}^{n}x_{i}*p(x_{i})xix_{i} 的值乘以 xix_{i} 的发生的概率即 xip(xi)x_{i} *p(x_{i}),再求和就是期望。

举例,一个数列是 [1, 2, 3],那么 x1x_{1} = 1, x2x_{2} = 2, x3x_{3} =3,p(xi)=13p(x_{i}) = \frac{1}{3},这一组数的期望:131+132+133=1+2+33=2\frac{1}{3}*1+\frac{1}{3}*2+\frac{1}{3}*3=\frac{1+2+3}{3}=2

发现期望等同均值。
 


伪随机

关于骰子的随机性,其实一直都有争论。有人认为如果可以知道扔骰子的所有信息:
概率论的起源

那么可以计算出扔骰子的结果,所以这种随机性称为 \color{Salmon}{伪随机},导致随机的原因是信息不足、或者计算困难。

概率论的起源
从程序角度讲,我们软件即算法实现的随机数都是伪随机数,而依据硬件传感器的热量变化、声音变化、光线变化、压敏变化等生成的随机数是真随机的。

概率论的起源
由于内部状态决定下一个伪随机数的生成,所以**在于内部状态;伪随机数种子是需要保密的,几乎等同加密术的钥匙不能告诉别人。

因此千万不能使用易预测的值(用当前时间当种子)

伪随机数生成器(内部状态)实现方法:

  • 线性同余法
  • 单向散列函数法
  • 密码法
  • ANSI X9.17

C语言的随机数函数采用的是第一种,线性同余法应用广泛因为不具备不可测性不能用于加密解密。

假设我们要生成的伪随机数列是R1,R2,...RnR_{1}, R_{2}, ... R_{n} ,第一个伪随机数种子 R1R_{1} 是必须先给出来的,接着用一个公式计算下一个伪随机数:概率论的起源
seed是种子,是一个变量R1,R2,...RnR_{1}, R_{2}, ... R_{n},不过因为计算的是R2R_{2} ,所以 seed 此时是R1R_{1},A 、C、M 都是常量,且 A、C 要小于 M 。

// 这是  C 标准库 实现的伪随机数rand函数算法,java的java.util.Random类等也是采用线性同余法
 
static unsigned long int next = 1;   // 种子默认值
 
int rand(void)   // 内部状态,线性同余法
{
    next = next * 1103515245 + 12345;
    // A : 1103515245   seed : next    C : 12345  M : 32768
 
    return (unsigned int) (next>>16) & 32768;
    // next>>16 等同于 next / 65536 , 32768是2的幂,% 换成了 &。   p.s. x & (x-1) == 0 [判断2的幂 为0就是]
}
 
void srand(unsigned int seed) 
{
    next = seed;  // 种子是数字
}
// 调用函数
// srand( (unsigned)time(NULL) ); 采用当前时间做种子,循环产生随机数是相同的,因为时间只精确到秒
// int  a = rand()%66+22;
// 稍往安全方面考虑,A、C、M 可以用宏替换,隐藏数字值。

随机数资料:http://m.biancheng.net/view/2043.html

如果不调用 next = 1 就是种子R1R_{1},rand函数就是内部状态,因为ta改变了next的值,种子值变化了。所以,下一次会产生不同的随机数,需要相同的伪随机数,只需要让 next 不变即可。

**方法 : 利用线性同余法生成的数列反推 A、C、M,假设推出 A = 1103515245 ,C = 12345 , M = 32768 。这时如果得到任意一个伪随机数再根据下列公式就可预测下一个伪随机数。

(A * R + C) mod M = (1103515245 * R + 12345) % 32768 =》 接着把 得到的任意一个伪随机数代入,可得到下一个伪随机数。
 


真随机

概率论的起源
上面动图的意思是,有只猫和一个放射性物质一起放置在不透明的盒子中。这个放射性物质有50%的可能性衰变。如果发生衰变的话,猫就会死亡,也就是猫有50%的可能性死亡。这个思想实验是由薛定谔提出来的,所以称为 \color{Salmon}{薛定谔的猫}

在这个思想实验中,不开盖子是真不知道猫的死活,这是因为放射性物质的衰变真的不可预测,这称为 \color{Salmon}{真随机}

一个光子通过两道缝到达屏幕,如果您观测,会发现TA或者是从左边的缝过去,或者是从右边的缝过去 —— 到底从哪走,您无法决定。

做完实验打开容器,薛定谔的猫或者是死的或者是活的,是死是活您事先没有任何办法控制。

波函数坍缩到什么结果,是完全随机的事件。

对物理学家来说,量子随机性是唯一随机性,是物理定律不能预测的结果,是真正的意外。

正因为量子力学不断制造意外,我们才在本质上也无法计算每个粒子的运动,所以宇宙中的信息才会越来越多。

再进一步,量子力学的随机性对早期宇宙至关重要。

如果早期宇宙是绝对均匀的,那大爆炸就应该向各个方向均匀地爆炸,那就会得到一个绝对均匀的宇宙 —— 可是我们这个宇宙显然不是绝对均匀的,有些地方产生了星球,有些地方是一片空旷的空间。

想要有这样的差异,我们就得要求早期宇宙中有一点点的不均匀。

物理学家把那一点点的不均匀叫做“量子涨落”。

幸亏有量子涨落,今天的宇宙才多姿多彩。

这就是很多物理学家心目中的“主流”世界观,量子力学里,似乎是有真正的随机性的。

但如果用数学宇宙的观点,一切都是确定的,只有波函数坍缩是不受数学控制的,因此,他们用平行宇宙代替波函数坍缩。

在随机+波函数坍缩的量子世界里,世界就是世界,我们的世界只有一个,这个世界真的存在真随机;可在确定+平行宇宙的数学宇宙里,世界其实有无数个,我们的世界只是其中的某一个,我们在重复,但我们会把所有可能性走遍,我们只是其中一种可能性罢了。

可能在这个平行世界,您没有和喜欢的人在一起,但无数个平行世界中,一定有一种可能一定会被实现,也就是说,您和喜欢的人不是没在一起,而是处于另外一个平行世界哦。

相关标签: 概率论