本质来讲,这也可以看做对于一个n元素哈希表插入n个项的最长哈希链长度期望的计算。
先说结论:
O
(
ln
n
ln
ln
n
)
\Large O(\frac{\ln n}{\ln\ln n})
O(lnlnnlnn)
证明分四步走:
1. 定义事件 A k A_k Ak为对于特定一个桶,刚好放有k个球的概率。
P [ A k ] = ( n k ) ⋅ ( 1 n ) k ⋅ ( 1 − 1 n ) n − k \large P[A_k] = \binom{n}{k} \cdot (\frac{1}{n})^k \cdot (1-\frac{1}{n})^{n-k} P[Ak]=(kn)⋅(n1)k⋅(1−n1)n−k
2. 定义事件 X k X_k Xk为球最多的桶的球个数恰好为k、事件 B i , k B_{i,k} Bi,k为恰好为i号桶球最多,并且球有k个。
可知:
X
k
=
⋃
i
B
i
,
k
\large X_k = \bigcup_{i}{B_{i,k}}
Xk=i⋃Bi,k
显然,可以推得:
P
[
X
k
]
≤
∑
i
P
[
B
i
,
k
]
\large P[X_k] \le \sum_{i}P[B_{i,k}]
P[Xk]≤i∑P[Bi,k]
这是因为等号只会发生在事件B两两互斥时,其余情况概率会更小。
由此有:
P
[
X
k
]
≤
n
⋅
P
[
B
1
,
k
]
\large P[X_k] \le n\cdot P[B_{1,k}]
P[Xk]≤n⋅P[B1,k]
注意到:
P
[
B
1
,
k
]
≤
P
[
A
k
]
\large P[B_{1,k}]\le P[A_k]
P[B1,k]≤P[Ak]
这是因为事件
A
k
A_k
Ak仅满足特定桶有k个,但不保证其余桶少于k个,所以概率更大。
由此得到重要结论:
P
[
X
k
]
≤
n
⋅
P
[
A
k
]
\large P[X_k]\le n\cdot P[A_k]
P[Xk]≤n⋅P[Ak]
3. 证明 ( n k ) < ( e n ) k k \binom{n}{k} < \frac{(en)}{k}^k (kn)<k(en)k
这个是斯特林公式的二级结论,此处不再多加赘述。回代本公式到上方结论可以得到:
P
[
X
k
]
<
n
⋅
(
e
k
)
k
\large P[X_k] < n\cdot (\frac{e}{k})^k
P[Xk]<n⋅(ke)k
由于
(
1
−
1
n
)
n
−
k
<
1
(1-\frac{1}{n})^{n-k} < 1
(1−n1)n−k<1,所以略去。
此时构造:
c
=
3
ln
ln
n
ln
ln
n
−
ln
ln
ln
n
,
K
0
=
c
ln
n
ln
ln
n
c=\frac{3\ln\ln n}{\ln\ln n-\ln\ln\ln n}, K_0 = \frac{c\ln n}{\ln\ln n}
c=lnlnn−lnlnlnn3lnlnn,K0=lnlnnclnn
注意到当
∀
k
>
K
0
\forall k>K_0
∀k>K0有
(
e
k
)
k
<
1
n
3
\large (\frac{e}{k})^k<\frac{1}{n^3}
(ke)k<n31
4. 证明 E [ X k ] ≤ ( K 0 ⋅ P [ X ≤ K 0 ] + n ⋅ P [ X > K 0 ] ) E[X_k] \le (K_0 \cdot P[X\le K_0] + n\cdot P[X>K_0]) E[Xk]≤(K0⋅P[X≤K0]+n⋅P[X>K0])
这不难证明,因为
E
[
X
k
]
=
∑
i
⋅
P
[
X
i
]
E[X_k] = \sum_i \cdot P[X_i]
E[Xk]=∑i⋅P[Xi] 这就是把前面小于
K
0
K_0
K0的乘上最大的
K
0
K_0
K0,后面的乘上范围最大的值n。
再次放缩:
P
[
X
≤
K
0
]
<
1
P[X\le K_0]<1
P[X≤K0]<1 且
P
[
X
>
K
0
]
<
(
n
−
K
0
)
⋅
n
⋅
(
e
k
)
k
<
1
n
P[X>K_0]<(n-K_0)\cdot n\cdot (\frac{e}{k})^k<\frac{1}{n}
P[X>K0]<(n−K0)⋅n⋅(ke)k<n1
带回有:
E
[
X
k
]
<
K
0
+
1
\large E[X_k] < K_0 + 1
E[Xk]<K0+1
E
[
X
k
]
<
c
ln
n
ln
ln
n
+
1
\large E[X_k] < \frac{c\ln n}{\ln\ln n} + 1
E[Xk]<lnlnnclnn+1
E
[
X
k
]
=
O
(
ln
n
ln
ln
n
)
\large E[X_k] = O(\frac{\ln n}{\ln\ln n})
E[Xk]=O(lnlnnlnn)