思考题11-1
a) 类似推论11.7,我们插入一个关键字需要先做一次不成功查找然后将该关键字置入到第一个遇到的空槽,在定理11.6的证明中,设随机变量 X 为一次不成功查找探查次数,Pr{X≥i}=αi−1。因为 n≤m/2→α≤1/2,所以有:
Pr{X>k}=Pr{X≥k+1}≤(1/2)(k+1)−1=2−k
b) 由 a)然后带入 k=2lgn 得 2−2lgn=2lg1n2=1n2。这里需要处理一下2lgn 不是整数时的概率,第 i 次插入需要超过 2lgn 次探查的次数和第 i 次插入需要超过 ⌊2lgn⌋ 次探查的次数一样,又 ⌊2lgn⌋>2lgn−1,所以:
2−⌊2lgn⌋<2−(2lgn−1)=2/n2=O(1/n2)
c) 令事件 A 表示 X>2lgn, Ai 表示 Xi>2lgn,由 b) 知 Pr{Ai}=O(1/n2),下面有:
Pr{A}≤Pr{A1}+Pr{A2}+⋯+Pr{An}=O(1/n)
d)
E[X]=∑k=1nk⋅Pr{X=k}=∑k=1⌈2lgn⌉k⋅Pr{X=k}+∑k=⌈2lgn⌉+1nk⋅Pr{X=k}≤∑k=1⌈2lgn⌉⌈2lgn⌉⋅Pr{X=k}+∑k=⌈2lgn⌉+1nn⋅Pr{X=k}=⌈2lgn⌉⋅∑k=1⌈2lgn⌉Pr{X=k}+n⋅∑k=⌈2lgn⌉+1nPr{X=k}
又有
∑k=1⌈2lgn⌉Pr{X=k}=Pr{X≤⌈2lgn⌉}≤1,∑k=⌈2lgn⌉+1nPr{X=k}≤Pr{X>2lgn}=O(1/n)以及 c) 得:
E[X]≤⌈2lgn⌉⋅1+n⋅O(1/n)=O(nlgn)
思考题11-2
a) 从 n 个关键字中选 k 个散列到某一特定的槽,剩下的落入到其他 n−1 个槽,所以有:
Qk=(1n)k(1−1n)n−k(nk)
b) 令随机变量 Xi 表示第 i 个槽的关键字个数,事件 Ai 表示第 i 个槽有 k 个关键字,由 a) 知 Pr{A}=Qk。因而有:
Pk=Pr{M=k}=Pr{(max1≤i≤nXi)=k}=Pr{∃i使得Xi=k且∀i都有Xi≤k}≤Pr{∃i使得Xi=k}=Pr{A1∪A2∪⋯∪An}≤Pr{A1}+Pr{A2}+⋯+Pr{An}=nQk
c) 首先,1−1/n<1→(1−1n)n−k<1,n!(n−k)!=n⋅(n−1)⋅⋅⋅(n−k+1)<nk 以及 k!>(k/e)k(化简后的等式3.18)。因此我们得:
Qk=(1n)k(1−1n)n−kn!k!(n−k)!<n!nkk!(n−k)!<1k!<ekkk
d) 当 n=2 时 lglgn=0,为了简洁,我们假设 n≥3。
由 c) 知对任意 k 有 Qk<ek/kk,特别的存在 k0 使得不等式成立,因此证明 ek0/kk0<1/n3。在等式两边取对数有:
3lgn<k0(lgk0−lge)=clgnlglgn(lgc+lglgn−lglglgn−lge)
化简得:
3<c(1+lgc−lgelglgn−lglglgnlglgn)
令
x=(1+lgc−lgelglgn−lglglgnlglgn),现在需要证明存在常数
c>1 使得
3<cx。
注意到
limn→∞x=1,存在
n0 使得当
x≥1/2 时对任意
n≥n0 都成立 ,即
c>6。
现在处理
3≤n<n0,由于
n 是整数且是一个有限值,我们可以对每个
n 得到一个
x,再找到
c 使得
3<cx,然后最后的
c 要么取
6,要么是
3≤n<n0 时得到的
c 的最大值。
如此我们便证明了
Qk0<1/n3,对于证明当
k≥k0 有
Pk<1/n2。先由 b) 选择一个
k0 知
Pk0≤nQk0<n⋅(1/n3)=1/n2。对任意
k>k0,我们将证明有一个常数
c 使得对任意
k>k0 都有
Qk<1/n3。
设
c 足够大并且
k0>3>e,则当
k>k0 时有
e/k<1 且
k 减小时
ek/kk 减小。
Qk<ek/kk≤ek0/kk0<1/n3
e)
E[M]=∑k=0nk⋅Pr{M=k}=∑k=0k0k⋅Pr{M=k}+∑k=k0+1nk⋅Pr{M=k}≤∑k=0k0k0⋅Pr{M=k}+∑k=k0+1nn⋅Pr{M=k}=k0⋅∑k=0k0Pr{X=k}+n⋅∑k=k0+1nPr{M=k}=k0⋅Pr{M≤k0}+n⋅Pr{M>k0}
因为
k0=clgn/lglgn,因此上式就是我们要证明的。
由于
Pr{M≤k0}≤1且:
Pr{M>k0}=∑k=k0+1nPr{M=k}=∑k=k0+1nPk<∑k=k0+1n1/n2<n⋅(1/n2)=1/n
所以:
E[M]≤k0⋅1+n⋅(1/n)=k0+1=O(lgn/lglgn)思考题11-3
a) 显然探查序列为 <h(k),h(k)+1,,h(k)+1+2,,h(k)+1+2+3...,h(k)+1+2+...+i,,,>,所以可以给出:h′(k,i)=(h(k)+12i+12i2) mod m
b) 令 h′(k,i) 表示第 i 次探查,下面要证明对给定的关键字,我们会探查 m 次并且每次探查的位置都不一样。也就是说对给定的 k,有任意的 0≤i<j<m 有 h′(k,i)≠h′(k,j),通过假设 h′(k,i)=h′(k,j) 来产生一个矛盾。
设存在一个关键字 k 和探查次数 i,j 使得当 0≤i<j<m 时有 h′(k,i)=h′(k,j)。
则有 h(k)+i(i+1)/2≡h(k)+j(j+1)/2 (mod m),这意味着 :
j(j+1)/2−i(i+1)/2≡0 (mod m)
又
j(j+1)/2−i(i+1)/2=(j−i)(j+i+1)/2,即
(j−i)(j+i+1)/2≡0 (mod m)。可以得到
(j−i)(j+i+1)=r⋅2m(r为整数)。设
m=2p,则
(j−i)(j+i+1)=r⋅2p+1。由于
j−i 和
j+i+1 的奇偶性不同,
2p+1 一定可以整除其中的一个因子,然而实际上却不能,所以得出矛盾,
h′(k,i)≠h′(k,j)。
思考题11-4
略