生日悖论
生日悖论的传统表述
生日悖论的起源是一个简单的问题:两个人出生在同一天的概率是多少?这个也通常是概率课堂上老师会展现的一个问题。这个问题的答案可以很轻松的看出是1/365≈0.274(假设一年只有365天,且生日分布均匀。因为两个人的生日是独立事件,所以第一个人可以为一年中的任意一天,而第二个人则是一年中固定的与第一个人相同的一天。也可以从反面计算两个人生日不同的概率(365*364)/(365*365),然后用1减去,可以得到相同的结果)。
生日悖论的扩展
而当问题扩展到在三个人中,有两个人生日相等的概率是多少时,由于第三人的引入,使得他既可以与第一个人发生碰撞(两个事件有相同的结果),也可以跟第二个人发生碰撞,所以从正面来直接求发生碰撞的概率是困难的(不能简单地因为三个人有三种碰撞的可能,就用(1/365)*3来计算,尽管在人数较少是两个算法结果相似,但是当人数越多,差距就越大)。我们不妨先计算不发生碰撞的概率:
设集合Ω={1,2,3,……,N}为事件的样本空间,且它们发生的概率
P
(
i
)
=
1
N
P(i)=\frac{1}{N}
P(i)=N1
,实验X就是从样本空间Ω中随机选择一个元素(不移走),则k次实验中结果至少有两次相同的概率是多少?
在生日悖论中,N=365,k就是在k个人中存在两个人生日相同的情况。
先算没有碰撞发生的情况:第一个人明显不会有重复,因此所有N个选择都可以选,没有重复的概率是1;选取第二个人时,为了避免与第一个人重复,只有(N-1)个选择,概率为
N
−
1
N
\frac{N-1}{N}
NN−1
,以此类推,第三个人无碰撞的概率为
N
−
2
N
\frac{N-2}{N}
NN−2
,第k个人无碰撞的概率为
N
−
k
N
\frac{N-k}{N}
NN−k
。
易知k个人都无碰撞的概率是
N
(
N
−
1
)
(
N
−
2
)
(
N
−
3
)
…
…
(
N
−
k
)
N
k
\frac{N(N-1)(N-2)(N-3)……(N-k)}{N^k}
NkN(N−1)(N−2)(N−3)……(N−k)
可以约分为:
(
1
−
i
N
)
(
1
−
2
N
)
.
.
.
(
1
−
k
−
1
N
)
(1-\frac{i}{N})(1-\frac{2}{N})...(1-\frac{k-1}{N})
(1−Ni)(1−N2)...(1−Nk−1)
由泰勒展开式
e
−
1
n
≈
1
−
1
N
e^\frac{-1}{n}≈1-\frac{1}{N}
en−1≈1−N1
当N足够大时,可以近似的将原式近似的写成
e
−
1
N
e
−
2
N
.
.
.
e
−
(
k
−
1
)
N
=
e
−
k
(
k
−
1
)
2
N
e^\frac{-1}{N}e^\frac{-2}{N}...e^\frac{-(k-1)}{N}=e^\frac{-k(k-1)}{2N}
eN−1eN−2...eN−(k−1)=e2N−k(k−1)
我们可以通过这个公式来求得一些临界值的k的大概取值,例如我们求无碰撞概率为0.5时的情况:
l
n
(
1
2
)
=
−
k
(
k
−
1
)
2
N
ln(\frac{1}{2})=\frac{-k(k-1)}{2N}
ln(21)=2N−k(k−1)
因为假设n为一个很大的值,所以在这里同样假设k也为很大的值,则有
k
2
=
N
(
2
l
n
2
)
k^2=N(2ln2)
k2=N(2ln2)
2ln2≈1.1774,所以:
k
≈
1.774
N
k≈1.774\sqrt{N}
k≈1.774N
生日悖论的简单应用
寻找两个特定的密文,它们的密文有某种相同的n位比特模式,那么通常要获得 2 n 2^{n} 2n个明文和密文才能保证找到相同的比特模式,而通能过生日悖论,只需要查看2^{n/2}个就能找到相同的模式。