生日悖论和Hash冲突
生日悖论问题
任何
N
N
N个人中,求至少有两个人生日相同的概率。
假设有
k
k
k个人,定义概率空间
(
Ω
,
F
,
P
)
(\Omega, \mathcal{F},P)
(Ω,F,P),
Ω
=
{
(
n
1
,
n
2
,
n
3
,
…
,
n
k
)
}
\Omega=\{(n_1,n_2,n_3, \dots,n_k )\}
Ω={(n1,n2,n3,…,nk)},
n
i
n_i
ni代表第
i
i
i个人的生日。
假设人数为2,那么这两个人生日相同的概率是 P ( { ω : X 1 ( ω ) = X 2 ( ω ) } ) P(\{\omega:X_1(\omega)=X_2(\omega)\}) P({ω:X1(ω)=X2(ω)}),可以在 Ω \Omega Ω中找到是这些样本: { ( 1 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) , … } \{(1,1), (2,2),(3,3),\dots\} {(1,1),(2,2),(3,3),…}, P ( ( 1 , 1 ) ) = 1 N ∗ 1 N P((1,1))=\frac{1}{N}*\frac{1}{N} P((1,1))=N1∗N1,因此 P { ( 1 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) , … } = 1 N ∗ 1 N ∗ N P\{(1,1), (2,2),(3,3),\dots\}=\frac{1}{N}*\frac{1}{N}*N P{(1,1),(2,2),(3,3),…}=N1∗N1∗N。
假设 N = 3 N=3 N=3,那么这3个人生日相同的概率是
P ( { ω : X 1 ( ω ) = X 2 ( ω ) o r X 1 ( ω ) = X 3 ( ω ) o r X 2 ( ω ) = X 3 ( ω ) } ) P(\{\omega:X_1(\omega)=X_2(\omega) \ or \ X_1(\omega)=X_3(\omega) \ or \ X_2(\omega)=X_3(\omega)\}) P({ω:X1(ω)=X2(ω) or X1(ω)=X3(ω) or X2(ω)=X3(ω)})
可以在 Ω \Omega Ω中找到是这些样本: { ( 1 , 1 , ∗ ) , ( 2 , 2 , ∗ ) , ( 3 , 3 , ∗ ) , ( ∗ , 1 , 1 ) , ( ∗ , 2 , 2 ) , ( ∗ , 3 , 3 ) , ( 1 , 1 , 1 ) … } \{(1,1, *), (2,2, *),(3,3, *),(*, 1,1), (*, 2,2),(*, 3,3),(1,1, 1)\dots\} {(1,1,∗),(2,2,∗),(3,3,∗),(∗,1,1),(∗,2,2),(∗,3,3),(1,1,1)…},由容斥原理即可计算。
但是这样太麻烦,考虑他的补集,就可以得到常用的计算方法, k k k个人中,没有生日相同的人的概率为:
N − 1 N ∗ N − 2 N ∗ … N − ( k − 1 ) N ≈ e − k ( k − 1 ) N \frac{N-1}{N}*\frac{N-2}{N}*\dots\frac{N-(k-1)}{N}\approx e^{\frac{-k(k-1)}{N}} NN−1∗NN−2∗…NN−(k−1)≈eN−k(k−1)
Hash冲突率
哈希的冲突率定义为 k k k个元素中,至少有两个出现相同值的概率,也就是“生日相同的概率”。