您的位置:首页 > 其它

CLRS第十一章思考题

2015-12-22 15:52 393 查看

思考题11-1

a) 类似推论11.7,我们插入一个关键字需要先做一次不成功查找然后将该关键字置入到第一个遇到的空槽,在定理11.6的证明中,设随机变量 XX 为一次不成功查找探查次数,Pr{X≥i}=αi−1P_r\{X\ge i\}=\alpha^{i-1}。因为 n≤m/2→α≤1/2n\le m/2\rightarrow \alpha \le 1/2,所以有:

Pr{X>k}=Pr{X≥k+1}≤(1/2)(k+1)−1=2−kP_r\{X>k\}=P_r\{X\ge k+1\}\le (1/2)^{(k+1)-1}=2^{-k}

b) 由 a)然后带入 k=2lgnk=2\lg n 得 2−2lgn=2lg1n2=1n22^{-2\lg n}=2^{\lg \frac{1}{n^2}}=\frac{1}{n^2}。这里需要处理一下2lgn2\lg n 不是整数时的概率,第 ii 次插入需要超过 2lgn2\lg n 次探查的次数和第 ii 次插入需要超过 ⌊2lgn⌋\lfloor 2\lg n\rfloor 次探查的次数一样,又 ⌊2lgn⌋>2lgn−1\lfloor 2\lg n\rfloor > 2\lg n-1,所以:

2−⌊2lgn⌋<2−(2lgn−1)=2/n2=O(1/n2)2^{-\lfloor 2\lg n\rfloor}<2^{-(2\lg n-1)}=2/n^2=O(1/n^2)

c) 令事件 AA 表示 X>2lgnX>2\lg n, AiA_i 表示 Xi>2lgnX_i>2\lg n,由 b) 知 Pr{Ai}=O(1/n2)P_r\{A_i\}=O(1/n^2),下面有:

Pr{A}≤Pr{A1}+Pr{A2}+⋯+Pr{An}=O(1/n)P_r\{A\}\le P_r\{A_1\}+P_r\{A_2\}+\dots +P_r\{A_n\}=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}\begin{align}
E[X]&=\sum \limits_{k=1}^{n}k·P_r\{X=k\}
\\&=\sum \limits_{k=1}^{\lceil2\lg n\rceil}k·P_r\{X=k\}+\sum \limits_{k=\lceil2\lg n\rceil+1}^{n}k·P_r\{X=k\}\\
&\le \sum \limits_{k=1}^{\lceil2\lg n\rceil}\lceil2\lg n\rceil·P_r\{X=k\}+\sum \limits_{k=\lceil2\lg n\rceil+1}^{n}n·P_r\{X=k\}\\
&=\lceil2\lg n\rceil·\sum \limits_{k=1}^{\lceil2\lg n\rceil}P_r\{X=k\}+n·\sum \limits_{k=\lceil2\lg n\rceil+1}^{n}P_r\{X=k\}
\end{align}

又有∑k=1⌈2lgn⌉Pr{X=k}=Pr{X≤⌈2lgn⌉}≤1,∑k=⌈2lgn⌉+1nPr{X=k}≤Pr{X>2lgn}=O(1/n)\sum \limits_{k=1}^{\lceil2\lg n\rceil}P_r\{X=k\}=P_r\{X\le \lceil 2\lg n\rceil\}\le 1,\sum \limits_{k=\lceil2\lg n\rceil+1}^{n}P_r\{X=k\}\le P_r\{X>2\lg n\}=O(1/n)以及 c) 得:

E[X]≤⌈2lgn⌉⋅1+n⋅O(1/n)=O(nlgn)\begin{align}
E[X]\le \lceil 2\lg n\rceil·1+n·O(1/n)=O(n\lg n)
\end{align}

思考题11-2

a) 从 nn 个关键字中选 kk 个散列到某一特定的槽,剩下的落入到其他 n−1n-1 个槽,所以有:

Qk=(1n)k(1−1n)n−k(nk)Q_k=(\frac 1n)^k(1-\frac 1n)^{n-k}\binom{n}{k}

b) 令随机变量 XiX_i 表示第 ii 个槽的关键字个数,事件 AiA_i 表示第 ii 个槽有 kk 个关键字,由 a) 知 Pr{A}=QkP_r\{A\}=Q_k。因而有:

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\begin{align}
P_k&=P_r\{M=k\}=P_r\{(\max\limits_{1\le i\le n}X_i)=k\}\\
&=P_r\{\exists i 使得 X_i=k且\forall i都有X_i\le k\}\\
&\le P_r\{\exists i 使得 X_i=k\}\\
&=P_r\{A_1\cup A_2\cup \dots \cup A_n\}\\
&\le P_r\{A_1\}+P_r\{A_2\}+\dots +P_r\{A_n\}\\
&=nQ_k
\end{align}

c) 首先,1−1/n<1→(1−1n)n−k<1,n!(n−k)!=n⋅(n−1)⋅⋅⋅(n−k+1)<nk1-1/n<1\rightarrow (1-\frac1n)^{n-k}<1,\quad \frac{n!}{(n-k)!}=n·(n-1)···(n-k+1) 以及 k!>(k/e)kk!>(k/e)^k(化简后的等式3.18)。因此我们得:

Qk=(1n)k(1−1n)n−kn!k!(n−k)!<n!nkk!(n−k)!<1k!<ekkkQ_k=(\frac 1n)^k(1-\frac 1n)^{n-k}\frac{n!}{k!(n-k)!}<\frac{n!}{n^kk!(n-k)!}<\frac{1}{k!}<\frac{e^k}{k^k}

d) 当 n=2n=2 时 lglgn=0\lg \lg n=0,为了简洁,我们假设 n≥3n\ge 3。

由 c) 知对任意 kk 有 Qk<ek/kkQ_k,特别的存在 k0k_0 使得不等式成立,因此证明 ek0/kk0<1/n3e^{k_0}/k^{k_0}<1/n^3。在等式两边取对数有:3lgn<k0(lgk0−lge)=clgnlglgn(lgc+lglgn−lglglgn−lge)3\lg n

化简得:

3<c(1+lgc−lgelglgn−lglglgnlglgn)3

令 x=(1+lgc−lgelglgn−lglglgnlglgn)x=(1+\frac{\lg c-\lg e}{\lg \lg n}-\frac{\lg \lg \lg n}{\lg \lg n}),现在需要证明存在常数 c>1c>1 使得 3<cx3。

注意到 limn→∞x=1\lim \limits_{n\rightarrow \infty}x=1,存在 n0n_0 使得当 x≥1/2x\ge 1/2 时对任意 n≥n0n\ge n_0 都成立 ,即 c>6c>6。

现在处理 3≤n<n03\le n,由于 nn 是整数且是一个有限值,我们可以对每个 nn 得到一个 xx,再找到 cc 使得 3<cx3,然后最后的 cc 要么取 66,要么是 3≤n<n03\le n 时得到的 cc 的最大值。

如此我们便证明了 Qk0<1/n3Q_{k_0}<1/n^3,对于证明当 k≥k0k\ge k_0 有 Pk<1/n2P_k<1/n^2。先由 b) 选择一个 k0k_0 知 Pk0≤nQk0<n⋅(1/n3)=1/n2P_{k_0}\le nQ_{k_0}。对任意 k>k0k>k_0,我们将证明有一个常数 cc 使得对任意 k>k0k>k_0 都有 Qk<1/n3Q_k<1/n^3。

设 cc 足够大并且 k0>3>ek_0>3>e,则当 k>k0k>k_0 时有 e/k<1e/k<1 且 kk 减小时 ek/kke^k/k^k 减小。

Qk<ek/kk≤ek0/kk0<1/n3Q_k

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}\begin{align}
E[M]&=\sum \limits_{k=0}^{n}k·P_r\{M=k\}
\\&=\sum \limits_{k=0}^{k_0}k·P_r\{M=k\}+\sum \limits_{k=k_0+1}^{n}k·P_r\{M=k\}\\
&\le \sum \limits_{k=0}^{k_0}k_0·P_r\{M=k\}+\sum \limits_{k=k_0+1}^{n}n·P_r\{M=k\}\\
&=k_0·\sum \limits_{k=0}^{k_0}P_r\{X=k\}+n·\sum \limits_{k=k_0+1}^{n}P_r\{M=k\}\\
&=k_0·P_r\{M\le k_0\}+n·P_r\{M>k_0\}
\end{align}

因为 k0=clgn/lglgnk_0=c\lg n/\lg \lg n,因此上式就是我们要证明的。

由于 Pr{M≤k0}≤1P_r\{M\le k_0\}\le 1且:

Pr{M>k0}=∑k=k0+1nPr{M=k}=∑k=k0+1nPk<∑k=k0+1n1/n2<n⋅(1/n2)=1/nP_r\{M>k_0\}=\sum \limits_{k=k_0+1}^{n}P_r\{M=k\}=\sum \limits_{k=k_0+1}^{n}P_k<\sum \limits_{k=k_0+1}^{n}1/n^2

所以:E[M]≤k0⋅1+n⋅(1/n)=k0+1=O(lgn/lglgn)E[M]\le k_0·1+n·(1/n)=k_0+1=O(\lg n/ \lg \lg n)

思考题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 mh'(k,i)=(h(k)+\frac 12i+\frac 12i^2)\ mod\ m

b) 令 h′(k,i)h'(k,i) 表示第 ii 次探查,下面要证明对给定的关键字,我们会探查 mm 次并且每次探查的位置都不一样。也就是说对给定的 kk,有任意的 0≤i<j<m0\le i 有 h′(k,i)≠h′(k,j)h'(k,i)\ne h'(k,j),通过假设 h′(k,i)=h′(k,j)h'(k,i)= h'(k,j) 来产生一个矛盾。

设存在一个关键字 kk 和探查次数 i,ji,j 使得当 0≤i<j<m0\le i 时有 h′(k,i)=h′(k,j)h'(k,i)= h'(k,j)。

则有 h(k)+i(i+1)/2≡h(k)+j(j+1)/2 (mod m)h(k)+i(i+1)/2\equiv 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\equiv 0\ (mod\ m)

又 j(j+1)/2−i(i+1)/2=(j−i)(j+i+1)/2j(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)/2\equiv 0\ (mod\ m)。可以得到 (j−i)(j+i+1)=r⋅2m(r为整数)(j-i)(j+i+1)=r·2m(r为整数)。设 m=2pm=2^p,则 (j−i)(j+i+1)=r⋅2p+1(j-i)(j+i+1)=r·2^{p+1}。由于 j−ij-i 和 j+i+1j+i+1 的奇偶性不同,2p+12^{p+1} 一定可以整除其中的一个因子,然而实际上却不能,所以得出矛盾,h′(k,i)≠h′(k,j)h'(k,i)\ne h'(k,j)。

思考题11-4

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: