跳到主要内容

文章 | 一个有趣的概率论佯谬

提示

本文首发于知乎。

晚上和同学讨论概率论的时候,发现了一个有趣的佯谬:

可以在 (0, 1) 内等概率选取一个实数,但不能在其中等概率选取一个有理数。

乍一看很反直觉,明明实数比有理数多,为什么选有理数就选不出来呢?

其实答案很简单。关键在于如何理解「等概率」


省流版

省流版:实数的等概率分布只需要概率密度函数为常数;而有理数是可列集,等概率要求每个点都有相等的确定的概率。

好,文章到此结束。

如果你觉得还没结束,那就继续往后看吧。


有理数的情形

让我们先来看一个更直观的问题:能否等概率地从自然数中选取一个数?

直观来看好像不行。因为自然数有无穷多个,如果等概率选取,那么每个数被选到的概率都是零,这好像不太合理。

为了解决这个问题,先来复习一下概率的公理化定义

记样本空间为 Ω\OmegaF\mathscr{F}Ω\Omega 上的一个 σ 代数,若存在函数 P:FRP: \mathscr{F} \to \mathbb{R} ,使得

  1. AF,P(A)0\forall A \in \mathscr{F}, P(A) \ge 0
  2. P(Ω)=1P(\Omega)=1
  3. 任给可数个 A1,A2,FA_1,A_2,\ldots \in \mathscr{F} ,若两两不交,则 P(i=1Ai)=i=1P(Ai)\displaystyle P\left(\bigcup_{i=1}^\infty A_i\right)=\sum_{i=1}^\infty P(A_i) 。 则称 PPF\mathscr{F} 上的一个概率测度。

重点在第三条(可数可加性)。假设存在一个等概率选取的方式,选到每一个数的概率都是 pp ,那么为了保证 i=1P({i})=i=1p\displaystyle \sum_{i=1}^\infty P(\{i\})=\sum_{i=1}^\infty p 收敛,必须有 p=0p=0

但同时,根据第二条, P(N)=P(i=1{i})=i=1P({i})\displaystyle P(\mathbb{N})=P\left(\bigcup_{i=1}^\infty \{i\}\right)=\sum_{i=1}^\infty P(\{i\}) ,这个式子左边为 1,右边为 0,矛盾

事实上,在区间 (0, 1) 内等概率选取一个有理数与之前提到的等概率选取自然数是等价的。有理数也是可列集,但从一个无限可列集合中等概率选取一个元素,意味着需要将每个元素的概率为零的点相加,以获得总体概率为 1,而这对于任何无限可列集合都是不可能实现的


实数的情形

那么,实数的情形又是怎样呢?

实数与有理数的根本区别在于实数是不可列集。这意味着,虽然存在一系列概率为 0 的点,但它们可以组合成一个概率大于 0 的事件。然而,由于实数集是不可列的,因此这种组合过程不能简单地用加法描述,而需要使用积分。积分的一个重要特征是它可以将零值变成非零值。

这也表明,我们需要重新思考「等概率」的含义。由于几乎所有单点处的概率都为零,因此对于任何一种概率分布,单点的概率相等是一个自然的条件,并不能提供更多信息。

为了简化问题,我们只考虑 Borel 集。在 Borel 集上,「等概率」实际上指的是「平移性」。我们要求长度相同的区间具有相等的概率。例如,下面的条件就给出了很强的平移性要求:

B\mathscr{B}(0, 1) 上的 Borel 集, P:BRP:\mathscr{B}\to\mathbb{R}B\mathscr{B} 上的概率测度。任取 0l<a<b<10\le l<a<b<1 ,要求有 P([a,b])=P([al,bl])P([a,b])=P([a-l,b-l])

这个条件要求,只要区间长度相同,无论长度具体是多少,它们都应该具有相等的概率。符合这个条件的概率分布被认为是「等概率」的。

实际上,「等概率」的定义并不是严格唯一的。在某些情况下,只要满足一些较弱的条件,也可以被称为等概率。

用概率密度函数可以很容易给出一个等概率的分布,只需要令 f(x)=1,x(0,1)f(x)=1, x\in (0,1) ,就可以得到 (0, 1) 上的一个等概率分布。

在这种分布下,对于长度为 ll 的区间,始终有 P([a,a+l])=aa+lf(x)dx=lP([a, a+l])=\displaystyle \int_a^{a+l} f(x)\mathrm{d}x=l ,概率只与区间长度有关,因此是等概率分布。


课后练习

问题一:既然在区间 (0, 1) 内等概率选取一个实数是可行的,那么在全体实数内等概率选取一个实数是否也可行呢?

问题二:下面是一段尝试等概率选取有理数的程序:

function sample_rational() {
do {
a = sample() // 等概率随机选取 (0,1) 内的一个实数
} while (!is_rational(a)) // 直到生成有理数
return a // 返回等概率选取的有理数
}

这段程序与文章最开始的判断矛盾吗?


这篇文章使用了 AI 辅助创作,文章中的一些语句经过 ChatGPT 的修改和优化。

Loading...