學校門口,四位手機尾號取快遞。問:設有 \(n\) 個包裹,則存在兩個包裹號碼(收件人手機尾號,假設均勻分布)相同的概率 \(P(n)\) 是多少?
答曰:手機尾號一共有 \(10^4=10000\) 個,所以 \( P(n)=\frac{A_{10000}^n}{(10000)^n} \), 其中 \(A_n^r\) 為排列數。
求出表達式非常簡單,然而計算具體值時卻遇到了麻煩:分子和分母都太大了,IEEE 754 浮點數受不了了,直接扔給我個 Infinity.
怎么辦呢?把排列數展開,取對數,乘除變加減:
\( \log{P(n)} \)
\( = \log{\frac{A_{10000}^n}{(10000)^n}} \)
\( =\log{A_{10000}^n}-n\log{10^4} \)
\( =\log{10^4(10^4-1)\cdots(10^4-n+1)}-4n\log{10} \)
\( =\log{10^4}+\log{(10^4-1)}+\cdots+\log{(10^4-n+1)}-4n\log{10} \)
不想這么麻煩的話,也有很精確的階乘近似公式可用(這里就不限於整數了):
\( \left\{\begin{matrix} n! = \Gamma(n+1) \\ \ln\Gamma(z) \approx \tfrac{1}{2} \left[\ln(2\pi) - \ln z\right] + z\left[\ln\left(z + \frac{1}{12z - \frac{1}{10z}}\right) - 1\right] \end{matrix}\right. \)
總之,最后能算出來具體的數。下面列出 n 取某些特殊值時的概率:
n | 20 | 40 | 60 | 80 | 100 | 120 | 140 | 160 | 180 | 200 |
P(n) | 2% | 8% | 16% | 27% | 39% | 51% | 62% | 72% | 80% | 87% |
\([20, 200]\) 區間內 \(y=P(x)\) 的函數圖像如下(只有 \(x\) 等於整數的點有實際意義):
看起來有點反直覺:重復的概率怎么這么大?確實這么大,只要手機尾號是均勻分布的。
不過,自己的號跟某個人的號一樣(存在某個人跟自己同號)的概率並不大:
所以,重號的概率不小,但自己碰上的概率就很小了。(不過那大得嚇人的重號概率還是很反直覺……)