概率度量随机事件发生的可能性,古典定义 = 有利结果数 ÷ 等可能结果总数。本节复现伽利略对大公的解答,练排列组合这两台计数机器,再用条件概率完成一次体检假阳性的反推。核心纪律只有一条:数之前先确认"等可能"。
掷两枚骰子,大公把"和为 7"的可能情况数成 6 种(1+6、2+5、3+4、4+3、5+2、6+1)?不——他数对了 7 的 6 种,却把和为 8 也数成了 6 种(把 4+4 加上重复计数)。正确清单:和为 7 有 6 种,和为 8 只有 5 种(2+6、3+5、4+4、5+3、6+2)。全部等可能结果是 6 × 6 = 36 种,所以:
大公的感觉(7 更常见)是对的,他的数法是错的。两枚骰子要区分(一枚红一枚绿),(红3, 绿4) 与 (红4, 绿3) 是两个不同结果——只有这样分,36 种结果才是等可能的;按"点数组合"去数会把 4+4 这种不可区分的组合与其他混在一起,权重就不齐了。
>>> from itertools import product >>> from collections import Counter >>> sums = [i + j for i, j in product(range(1, 7), repeat=2)] >>> Counter(sums)[7], Counter(sums)[8] (6, 5) >>> len(sums) 36
枚举全部 36 种,和为 7 占 6 种、和为 8 占 5 种——伽利略的答复被机器复述了一遍。
加法原理:分类做事,方法数相加。乘法原理:分步做事,方法数相乘。两枚骰子就是乘法原理:6 × 6。
排列:从 n 个里取 k 个按顺序排:P(n, k) = n!/(n−k)!。三本书排书架:3! = 6 种。
组合:只选不排:C(n, k) = n!/(k!(n−k)!)。从 5 人里选 2 人当代表:C(5,2) = 10 种——不分先后。
手算彩票的经典账:从 33 个号码里选 6 个(不分顺序),C(33,6) = 33!/(6!·27!)。分子分步算:33×32×31×30×29×28 = 先 33×32=1056;×31=32736;×30=982080;×29=28480160;×28=797448480。除以 720(6 的阶乘):**1,107,568** 种。中头奖概率约九十万分之一。
>>> from math import comb, perm, factorial >>> perm(3, 3), comb(5, 2) (6, 10) >>> comb(33, 6) 1107568 >>> comb(49, 6) # 双色球大盘口径再感受一下 13983816
49 选 6 的组合数接近 1400 万——概率直觉在组合数面前经常失灵,这正是"要动手数"的理由。
条件概率 P(A|B) = P(A 与 B) ÷ P(B):已知 B 发生后 A 的概率。乘法链:P(A 与 B) = P(B) × P(A|B)。
实战案例:某病发病率 1%,检测试剂对病人 99% 呈阳性、对健康人 5% 误报阳性。某人测出阳性,真患病概率多大?设 1 万人:
P(患病 | 阳性) = 99 ÷ 594 = 1/6 ≈ 16.7%。反直觉但正确:因为健康人基数大,5% 的误报淹没了 99% 的检出率。这个"自然频率"算法(想象 1 万人)比公式直白得多,是贝叶斯思维的入门姿势。
>>> from fractions import Fraction >>> Fraction(99, 100)*Fraction(1,100), Fraction(5,100)*Fraction(99,100) # 两类阳性来源 (99/10000, 495/10000) >>> Fraction(99, 10000) / (Fraction(99, 10000) + Fraction(495, 10000)) 1/6
答案精确为 1/6。
独立:一事件不影响另一事件的概率(P(A|B) = P(A)),两枚骰子相互独立。互斥:两事件不能同时发生(P(A 与 B) = 0),"和为 7"与"和为 8"互斥。互斥事件若都有正概率则必不独立(一个发生,另一个概率直接归零——影响大到不能再大)。骰子题里"和为 7 或和为 8"用加法:6/36 + 5/36 = 11/36(互斥才能直接加);"红骰 3 且和为 7"用乘法:1/6 × 1/6 = 1/36(独立才能直接乘)。
⚠️ 常见坑:P(A 或 B) 直接相加只对互斥成立,一般情形要扣掉重叠:P(A) + P(B) − P(A 与 B)。
房间里多少人,"有两人生日相同"的机会过半?直觉喊"一百多",正确答案 23 人。算对立事件"两两不同":第 2 人避开第 1 人 364/365,第 3 人再避开 343/365……连乘到第 23 人后取补。
>>> from fractions import Fraction >>> p = Fraction(1) >>> for k in range(23): ... p *= Fraction(365 - k, 365) >>> float(1 - p) 0.5072972343239857
23 人时概率 0.5073 刚过半。直觉错在把"有人和我同生日"(需两百多人过半)与"任意两人同生日"混为一谈——23 人两两配对有 C(23,2) = 253 对,机会攒得快。
问:赌徒连输十把,下一把该加倍押注吗?
答:不该。每把独立,骰子不记得前十把。把独立事件当有记忆的连锁,是赌场最欢迎的错觉。
单个事件的概率算熟了,下一节把"点数和"整体看成一个变量——分布登场。