CLRS 第一部分

练习

3.2-4

lgn!=Ω((lgne)lgn)\lceil\lg n\rceil! =\Omega((\frac{\lg n}{e})^{\lg n}),而若 lgn!\lceil\lg n\rceil! 多项式有界,则存在常数 CC 满足 lgn!=O(Clgn)\lceil\lg n\rceil! =O(C^{\lg n}),相互矛盾。因此 lgn!\lceil\lg n\rceil! 多项式无界;

lglgn!=O(lglgnlglgn)=O(2lglglgnlglgn)\lceil \lg\lg n\rceil! =O(\lceil\lg\lg n \rceil^{\lceil\lg\lg n \rceil})=O(2^{\lg\lceil\lg\lg n \rceil\cdot\lceil\lg\lg n \rceil})。其中,lglglgn<lglgn=o(lgn)\lg\lceil\lg\lg n \rceil<\lceil\lg\lg n \rceil=o(\sqrt{\lg n}),因此 lglgn!=2o(lgn)\lceil \lg\lg n\rceil! =2^{o(\lg n)} 是多项式有界的。

3.2-5

lg(lgn)=(lgn)1>lg(lgn)\lg^*(\lg n)=(\lg^*n)-1>\lg(\lg^*n)

4.2-2

4.2-3

N=2lgn[n,2n)N=2^{\lceil\lg n\rceil}\in[n,2n)。通过补 0 将矩阵维数扩展到 NN,运行时间为 Θ(Nlg7)=Θ(nlg7)\Theta(N^{\lg 7})=\Theta(n^{\lg 7})

4.2-5

基于矩阵分块乘法,

方法 运行时间递归式 渐进运行时间
用 132464 次乘法操作完成 68×6868\times 68 的矩阵相乘 T(n)=132464T(n/68)T(n)=132464T(n/68) Θ(nlog68132464)\Theta(n^{\log_{68}132464})
用 143640 次乘法操作完成 70×7070\times 70 的矩阵相乘 T(n)=143640T(n/70)T(n)=143640T(n/70) Θ(nlog70143640)\Theta(n^{\log_{70}143640})
用 155424 次乘法操作完成 72×7272\times 72 的矩阵相乘 T(n)=155424T(n/72)T(n)=155424T(n/72) Θ(nlog72155424)\Theta(n^{\log_{72}155424})

4.2-7

4.5-5

f(n)=nlogba(b+1)logb+1n=Θ(nlogba+1)f(n)=n^{\log_b a}\cdot (b+1)^{\lceil\log_{b+1}n\rceil}=\Theta(n^{\log_b a+1})。对于任意 mm,令 t=logb+1mt=\lceil\log_{b+1}m\rceil,总是存在 n=(b+1)t>mn=(b+1)^t>maf(n/b)=nlogba+1=f(n)af(n/b)=n^{\log_b a+1}=f(n),即不存在 c<1c<1 使得 af(n/b)cf(n)af(n/b)\le cf(n)

5.1-2

期望运行时间是 Θ(2lg(ba+1)ba+1lg(ba+1))\Theta(\frac{2^{\lceil\lg(b-a+1)\rceil}}{b-a+1}\lg(b-a+1))

5.1-3

期望运行时间是 Θ(1p(1p))\Theta(\frac{1}{p(1-p)})

5.2-2

记事件 AA 为恰有两人被聘用,Bi(i(1,n])B_i(i\in(1,n]) 为除了 1 以外只有 ii 被聘用。若 BiB_i 发生,则 ii 第一个应聘,且 2 到 i1i-1 的所有人在 1 之后应聘,因此 Pr{Bi}=1n(i1)\mathrm{Pr}\{B_i\}=\frac{1}{n(i-1)}Pr{A}=i=2nPr{Bi}=1ni=1n11i\mathrm{Pr}\{A\}=\sum_{i=2}^n\mathrm{Pr}\{B_i\}=\frac{1}{n}\sum_{i=1}^{n-1}\frac{1}{i}

5.3-3

使用这种随机化方法,结果为某一特定排列的概率为 knn\frac{k}{n^n},其中 kk 为整数,若这种方法能产生一个均匀随机排列,knn=1n!\frac{k}{n^n}=\frac{1}{n!},即 kn!=nnkn! =n^n,而 n>2n>2 时,n!n! 不是 nnn^n 的因子,因此 n>2n>2 时这种方法不能产生均匀随机排列。

5.3-5

nn1n31\sim n^3 的随机数互不相同的概率为 n3n3×n31n3××n3n+1n3 \frac{n^3}{n^3}\times\frac{n^3-1}{n^3}\times\cdots\times\frac{n^3-n+1}{n^3} 对于 k[0,n)k\in[0,n)n3n3kn2k1n2k=n3+n2kk2n3(n2k)>0 \frac{n^3}{n^3-k}-\frac{n^2-k-1}{n^2-k}=\frac{n^3+n^2k-k^2}{n^3(n^2-k)}>0 因此 n3n3×n31n3××n3n+1n3>n21n2×n21n21××n2nn2n+1=11n \begin{aligned} &\frac{n^3}{n^3}\times\frac{n^3-1}{n^3}\times\cdots\times\frac{n^3-n+1}{n^3}\\ >&\frac{n^2-1}{n^2}\times\frac{n^2-1}{n^2-1}\times\cdots\times\frac{n^2-n}{n^2-n+1}\\ =&1-\frac{1}{n} \end{aligned}

5.3-6

把结果中优先级相同的元素抽取出来,递归地随机排列,再按顺序放回原处。

5.4-4

假设一年有 nn 天。记 kk 个人中存在三个人生日相同为事件 AkA_kkk 个人中有 p(2pk)p(2p\le k) 对人生日相同,除此之外都两两不同为事件 BkpB_{kp}Pr{Bkp}=1p!×(k2)×(k22)××(k2p+22)×nn×n1n××nk+pn×1np=k!×n!p!×(k2p)!×2p×nk×(nk+p)!Pr{Ak}=1i=02ikPr{Bki}=1i=02ikk!×n!i!×(k2i)!×2i×nk×(nk+i)! \begin{aligned} \mathrm{Pr}\{B_{kp}\}&=\frac{1}{p!}\times\binom{k}{2}\times\binom{k-2}{2}\times\cdots\times\binom{k-2p+2}{2}\times\frac{n}{n}\times\frac{n-1}{n}\times\cdots\times\frac{n-k+p}{n}\times\frac{1}{n^p}\\ &=\frac{k!\times n!}{p!\times (k-2p)!\times 2^p\times n^k\times (n-k+p)!}\\ \mathrm{Pr}\{A_k\}&=1-\sum_{i=0}^{2i\le k}\mathrm{Pr}\{B_{ki}\}\\ &=1-\sum_{i=0}^{2i\le k}\frac{k!\times n!}{i!\times (k-2i)!\times 2^i\times n^k\times (n-k+i)!} \end{aligned} 带入 n=365n=365Pr{Ak}0.99\mathrm{Pr}\{A_k\}\ge 0.99kk 最小为 155155

5.4-7

Ai,lgn2lglgn=1/2lgn2lglgn=lg2nn A_{i,\lg n-2\lg\lg n}=1/2^{\lg n-2\lg\lg n}=\frac{\lg^2 n}{n} 将序列分为 nlgn2lglgn\lfloor\frac{n}{\lg n-2\lg\lg n}\rfloor 个不相交的组,每个组都不是长度为 lgn2lglgn\lg n-2\lg\lg n 的特征序列的概率是 (1lg2nn)nlgn2lglgn(1lg2nn)nlgn2lglgn1(1lg2nn)nlgn(elg2nn)nlgn=1n \begin{aligned} &(1-\frac{\lg^2 n}{n})^{\lfloor\frac{n}{\lg n-2\lg\lg n}\rfloor}\\ \le&(1-\frac{\lg^2 n}{n})^{\frac{n}{\lg n-2\lg\lg n}-1}\\ \le&(1-\frac{\lg^2 n}{n})^{\frac{n}{\lg n}}\\ \le&(e^{-\frac{\lg^2 n}{n}})^{\frac{n}{\lg n}}=\frac{1}{n} \end{aligned} 因此不出现比 lgn2lglgn\lg n-2\lg\lg n 更长的特征序列的概率小于 1n\frac{1}{n}

思考题

2-4

  1. T(n)=Θ(n+inversion)T(n)=\Theta(n+inversion)。回顾插入排序,外层循环每执行一次,逆序对数减少 tjt_j,最终逆序对数减少为 0,因此 inversion=j=0n1tjinversion=\sum_{j=0}^{n-1} t_j

3-6

我们只讨论 n>cn>c 的情况。

  1. f2(n)=lglgnf^*_2(n)=\lceil\lg\lg n\rceil
  2. f2(n)=log3lgnf^*_2(n)=\lceil\log_3\lg n\rceil
  3. g(n)=lgnlglgng(n)=\lg n-\lg\lg n,有 f2(n)=g1(lgn)f^*_2(n)=g^*_1(\lg n)。显然,g1(n)n1lgng^*_1(n)\ge\lceil\frac{n-1}{\lg n}\rceil

    t=g1(n)t=g^*_1(n),我们知道,tt 是满足 lgg0(n)+lgg1(n)++lggt1(n)n1\lg g^0(n)+\lg g^1(n)+\cdots+\lg g^{t-1}(n)\ge n-1 的最小整数。函数 x/g(x)x/g(x)(e,+)(e,+\infty) 上单调递增,且 gt1(n)>eg^{t-1}(n)>e,因此对于 i[0,t3]Zi\in[0,t-3]\cap\mathbb{Z}lggi(n)lggi+1(n)<lggi+1(n)lggi+2(n)\lg g^i(n)-\lg g^{i+1}(n)<\lg g^{i+1}(n)-\lg g^{i+2}(n),即 lggi(n)>ti1t1lgn\lg g^i(n)>\frac{t-i-1}{t-1}\lg n。若 t2n1lgnt\ge 2\frac{n-1}{\lg n},则 lgg0(n)+lgg1(n)++lggt2(n)>t2lgnn1\lg g^0(n)+\lg g^1(n)+\cdots+\lg g^{t-2}(n)>\frac{t}{2}\lg n\ge n-1,与 tt 是最小满足条件的整数矛盾,因此 t<2n1lgnt<\lfloor 2\frac{n-1}{\lg n}\rfloor

    综上所述,f2(n)[lgn1lglgn,2lgn1lglgn)f^*_2(n)\in[\lceil\frac{\lg n-1}{\lg\lg n}\rceil,\lfloor 2\frac{\lg n-1}{\lg\lg n}\rfloor)

4-4

  1. [zi]F(z)=Fi[zi](z+zF(z)+z2F(z))={1i=0F0i=1Fi2+Fi1i2=Fi \begin{aligned} &[z^i]F(z)=F_i\\ &\begin{aligned} [z^i](z+zF(z)+z^2F(z))&= \begin{cases} 1 & i=0\\ F_0 & i=1\\ F_{i-2}+F_{i-1} & i\ge 2 \end{cases}\\ &=F_i \end{aligned} \end{aligned}
  2. 由 a 可知,(1zz2)F(z)=z(1-z-z^2)F(z)=z,因此 F(z)=z1zz2=z(1ϕz)(1ϕ^z)=15(11ϕz11ϕ^z) F(z)=\frac{z}{1-z-z^2}=\frac{z}{(1-\phi z)(1-\hat{\phi}z)}=\frac{1}{\sqrt{5}}(\frac{1}{1-\phi z}-\frac{1}{1-\hat{\phi}}z)
  3. 11ϕz=i=0+ϕizi11ϕ^z=i=0+ϕ^izi \begin{aligned} \frac{1}{1-\phi z}&=\sum_{i=0}^{+\infty}\phi^iz^i\\ \frac{1}{1-\hat{\phi}z}&=\sum_{i=0}^{+\infty}\hat{\phi}^iz^i \end{aligned} 因此 F(z)=i=0+15(ϕiϕ^i)zi F(z)=\sum_{i=0}^{+\infty}\frac{1}{\sqrt{5}}(\phi^i-\hat{\phi}^i)z^i
  4. 由 c 可知,Fi=15(ϕiϕ^i)F_i=\frac{1}{\sqrt{5}}(\phi^i-\hat{\phi}^i),因为 FiF_i 是整数且 15ϕ^i<12\frac{1}{\sqrt{5}}\hat{\phi}^i<\frac{1}{2},所以 FiF_i15ϕi\frac{1}{\sqrt{5}}\phi^i 舍入到最近的整数。

4-5

  1. 坏芯片选择一个所有坏芯片的子集,子集内部的芯片互相报告为好芯片,同时将子集外的芯片报告为坏芯片,这时从结果来看,这个子集内的坏芯片和好芯片是完全等价的;
    • nn 个芯片分为 n2\lfloor\frac{n}{2}\rfloor 对,若 nn 为奇数则有一个芯片 CC 不在任何一对里;
    • 对这 n2\lfloor\frac{n}{2}\rfloor 对芯片依次检测,若两个芯片都报告对方是好的,则任意抛弃一个,否则将两个芯片都抛弃;
    • nn 为奇数且除了 CC,存在其他芯片未被抛弃,则抛弃 CC
    这一过程之后芯片数量减少到至多 n2\lfloor\frac{n}{2}\rfloor 个,同时好芯片数量超过一半的性质依然存在。
  2. 最坏情况下的比较次数 T(n)={0n=1T(n2)+n2n2 T(n)=\begin{cases} 0 & n=1\\ T(\lfloor\frac{n}{2}\rfloor)+\lfloor\frac{n}{2}\rfloor & n\ge 2 \end{cases} 一方面,T(n)n2=Ω(n)T(n)\ge\lfloor\frac{n}{2}\rfloor=\Omega(n),另一方面,对 T(n)T(n) 使用数学归纳法,假设对于所有 m<nm<n 都有 T(m)mT(m)\le m 成立,T(n)n2+n2nT(n)\le \lfloor\frac{n}{2}\rfloor+\lfloor\frac{n}{2}\rfloor\le n,因此 T(n)=O(n)T(n)=O(n)。综上,T(n)=Θ(n)T(n)=\Theta(n)

4-6

  1. 必要性是显然的,我们来讨论充分性。

    条件变形得到 A[i][j]A[i][j+1]A[i+1][j]A[i+1][j+1]A[i][j]-A[i][j+1]\le A[i+1][j]-A[i+1][j+1],由不等式的传递性,对于 k>ik>iA[i][j]A[i][j+1]A[k][j]A[k][j+1]A[i][j]-A[i][j+1]\le A[k][j]-A[k][j+1]。再次变形得到 A[i][j]A[k][j]A[i][j+1]A[k][j+1]A[i][j]-A[k][j]\le A[i][j+1]-A[k][j+1],由不等式的传递性,对于 i<k,j<li<k,j<lA[i][j]A[k][j]A[i][l]A[k][l]A[i][j]-A[k][j]\le A[i][l]-A[k][l],即 A[i][j]+A[k][l]A[k][j]+A[i][l]A[i][j]+A[k][l]\le A[k][j]+A[i][l]
  2. 记该 Monge 矩阵为 MM。因为 MM 是 Monge 矩阵,对于 j<kj<kM[i][j]M[i][k]M[i+1][j]M[i+1][k]M[i][j]-M[i][k]\le M[i+1][j]-M[i+1][k]。假设存在 i[1,m)i\in[1,m)f(i)>f(i+1)f(i)>f(i+1),由于 M[i+1][f(i+1)]M[i+1][f(i+1)] 是第 i+1i+1 行的最左最小值,M[i+1][f(i+1)]M[i+1][f(i)]0M[i+1][f(i+1)]-M[i+1][f(i)]\le 0,因此 M[i][f(i+1)]M[i][f(i)]0M[i][f(i+1)]-M[i][f(i)]\le 0,与 M[i][f(i)]M[i][f(i)] 是第 ii 行的最左最小值矛盾,因此 f(1)f(2)f(m)f(1)\le f(2)\le\cdots f(m)
  3. T(m,n)=T(m2,n)+Θ(m+n)=Θ(m+nlogm)T(m,n)=T(\lfloor\frac{m}{2}\rfloor, n)+\Theta(m+n)=\Theta(m+n\log m)

5-1

  1. 记事件 AtxA_{tx} 为进行 INCREMENT\mathrm{INCREMENT} 操作 tt 次后 i=xi=xPr{Atx}=(11nx+1nx)Pr{At1,x}+1nxnx1Pr{At1,x1}E[it]=x=1+Pr{Atx}×nx=x=1+((11nx+1nx)×Pr{At1,x}×nx+1nxnx1×Pr{At1,x1}×nx)=x=1+((11nx+1nx)×Pr{At1,x}×nx+1nx+1nx×Pr{At1,x}×nx+1)=x=1+(nx+1)Pr{At1,x}=E[it1]+1 \begin{aligned} &\mathrm{Pr}\{A_{tx}\}=(1-\frac{1}{n_{x+1}-n_x})\mathrm{Pr}\{A_{t-1,x}\}+\frac{1}{n_x-n_{x-1}}\mathrm{Pr}\{A_{t-1,x-1}\}\\ &\begin{aligned} E[i_t]&=\sum_{x=1}^{+\infty}\mathrm{Pr}\{A_{tx}\}\times n_x\\ &=\sum_{x=1}^{+\infty}\left((1-\frac{1}{n_{x+1}-n_x})\times\mathrm{Pr}\{A_{t-1,x}\}\times n_x+\frac{1}{n_x-n_{x-1}}\times\mathrm{Pr}\{A_{t-1,x-1}\}\times n_x\right)\\ &=\sum_{x=1}^{+\infty}\left((1-\frac{1}{n_{x+1}-n_x})\times\mathrm{Pr}\{A_{t-1,x}\}\times n_x+\frac{1}{n_{x+1}-n_x}\times\mathrm{Pr}\{A_{t-1,x}\}\times n_{x+1}\right)\\ &=\sum_{x=1}^{+\infty}(n_x+1)\mathrm{Pr}\{A_{t-1,x}\}=E[i_{t-1}]+1 \end{aligned} \end{aligned} 因此 E[it]=tE[i_t]=t
  2. 因为 ni=100in_i=100i,所以每次执行 INCREMENT\mathrm{INCREMENT} 时,计数器有 1/1001/100 的概率增加 1。因此 Pr{Atx}=(tx)1100x99100txD[in]=x=0nPr{Anx}(nxE[in])2=x=0n(nx)1100x99100nx(100xn)2=x=0n(nx)1100x99100nx(10000x(x1)+(10000200n)x+n2)=n(n1)+(1002n)n+n2=99n \begin{aligned} &\mathrm{Pr}\{A_{tx}\}=\binom{t}{x}\frac{1}{100}^x\frac{99}{100}^{t-x}\\ &\begin{aligned} D[i_n]&=\sum_{x=0}^n\mathrm{Pr}\{A_{nx}\}(n_x-E[i_n])^2\\ &=\sum_{x=0}^n\binom{n}{x}\frac{1}{100}^x\frac{99}{100}^{n-x}(100x-n)^2\\ &=\sum_{x=0}^n\binom{n}{x}\frac{1}{100}^x\frac{99}{100}^{n-x}\left(10000x(x-1)+(10000-200n)x+n^2\right)\\ &=n(n-1)+(100-2n)n+n^2=99n \end{aligned} \end{aligned} 更一般的,ni=din_i=diD[in]=(d1)nD[i_n]=(d-1)n

5-2

  1. 显然,最坏情形下 DETERMINISTIC-SEARCH\mathrm{DETERMINISTIC\text{-}SEARCH} 要访问 nk+1n-k+1 个下标。平均情形下,记 XX 为算法访问的下标个数,事件 AiA_i 为算法访问了 A[1]A[1]A[i]A[i] 并且没有结束, Pr{Ai}=(nik)(nk)E[X]=1+i=1n1Pr{Ai}=1+1(nk)i=1n1(nik)=1+1(nk)i=1n1(ik)=1+(nk+1)(nk)=n+1k+1 \begin{aligned} &\mathrm{Pr}\{A_i\}=\frac{\binom{n-i}{k}}{\binom{n}{k}}\\ &\begin{aligned} E[X]&=1+\sum_{i=1}^{n-1}\mathrm{Pr}\{A_i\}\\ &=1+\frac{1}{\binom{n}{k}}\sum_{i=1}^{n-1}\binom{n-i}{k}\\ &=1+\frac{1}{\binom{n}{k}}\sum_{i=1}^{n-1}\binom{i}{k}\\ &=1+\frac{\binom{n}{k+1}}{\binom{n}{k}}=\frac{n+1}{k+1} \end{aligned} \end{aligned}