练习
3.2-4
⌈lgn⌉!=Ω((elgn)lgn),而若
⌈lgn⌉!
多项式有界,则存在常数
C
满足
⌈lgn⌉!=O(Clgn),相互矛盾。因此
⌈lgn⌉!
多项式无界;
⌈lglgn⌉!=O(⌈lglgn⌉⌈lglgn⌉)=O(2lg⌈lglgn⌉⋅⌈lglgn⌉)。其中,lg⌈lglgn⌉<⌈lglgn⌉=o(lgn),因此
⌈lglgn⌉!=2o(lgn)
是多项式有界的。
3.2-5
lg∗(lgn)=(lg∗n)−1>lg(lg∗n)。
4.2-2
4.2-3
令
N=2⌈lgn⌉∈[n,2n)。通过补
0 将矩阵维数扩展到
N,运行时间为
Θ(Nlg7)=Θ(nlg7)。
4.2-5
基于矩阵分块乘法,
用 132464 次乘法操作完成
68×68
的矩阵相乘 |
T(n)=132464T(n/68) |
Θ(nlog68132464) |
用 143640 次乘法操作完成
70×70
的矩阵相乘 |
T(n)=143640T(n/70) |
Θ(nlog70143640) |
用 155424 次乘法操作完成
72×72
的矩阵相乘 |
T(n)=155424T(n/72) |
Θ(nlog72155424) |
4.2-7
4.5-5
令
f(n)=nlogba⋅(b+1)⌈logb+1n⌉=Θ(nlogba+1)。对于任意
m,令
t=⌈logb+1m⌉,总是存在
n=(b+1)t>m,af(n/b)=nlogba+1=f(n),即不存在
c<1
使得
af(n/b)≤cf(n)。
5.1-2
期望运行时间是
Θ(b−a+12⌈lg(b−a+1)⌉lg(b−a+1))。
5.1-3
期望运行时间是
Θ(p(1−p)1)。
5.2-2
记事件
A
为恰有两人被聘用,Bi(i∈(1,n])
为除了 1 以外只有
i
被聘用。若
Bi
发生,则
i
第一个应聘,且 2 到
i−1
的所有人在 1 之后应聘,因此
Pr{Bi}=n(i−1)1。Pr{A}=∑i=2nPr{Bi}=n1∑i=1n−1i1。
5.3-3
使用这种随机化方法,结果为某一特定排列的概率为
nnk,其中
k
为整数,若这种方法能产生一个均匀随机排列,nnk=n!1,即
kn!=nn,而
n>2
时,n!
不是
nn
的因子,因此
n>2
时这种方法不能产生均匀随机排列。
5.3-5
n
个
1∼n3
的随机数互不相同的概率为
n3n3×n3n3−1×⋯×n3n3−n+1
对于
k∈[0,n),
n3−kn3−n2−kn2−k−1=n3(n2−k)n3+n2k−k2>0
因此
>=n3n3×n3n3−1×⋯×n3n3−n+1n2n2−1×n2−1n2−1×⋯×n2−n+1n2−n1−n1
5.3-6
把结果中优先级相同的元素抽取出来,递归地随机排列,再按顺序放回原处。
5.4-4
假设一年有
n
天。记
k
个人中存在三个人生日相同为事件
Ak,k
个人中有
p(2p≤k)
对人生日相同,除此之外都两两不同为事件
Bkp。
Pr{Bkp}Pr{Ak}=p!1×(2k)×(2k−2)×⋯×(2k−2p+2)×nn×nn−1×⋯×nn−k+p×np1=p!×(k−2p)!×2p×nk×(n−k+p)!k!×n!=1−i=0∑2i≤kPr{Bki}=1−i=0∑2i≤ki!×(k−2i)!×2i×nk×(n−k+i)!k!×n!
带入
n=365
和
Pr{Ak}≥0.99,k
最小为
155。
5.4-7
Ai,lgn−2lglgn=1/2lgn−2lglgn=nlg2n
将序列分为
⌊lgn−2lglgnn⌋
个不相交的组,每个组都不是长度为
lgn−2lglgn
的特征序列的概率是
≤≤≤(1−nlg2n)⌊lgn−2lglgnn⌋(1−nlg2n)lgn−2lglgnn−1(1−nlg2n)lgnn(e−nlg2n)lgnn=n1
因此不出现比
lgn−2lglgn
更长的特征序列的概率小于
n1。
思考题
2-4
-
T(n)=Θ(n+inversion)。回顾插入排序,外层循环每执行一次,逆序对数减少
tj,最终逆序对数减少为
0,因此
inversion=∑j=0n−1tj;
-
3-6
我们只讨论
n>c
的情况。
-
f2∗(n)=⌈lglgn⌉;
-
f2∗(n)=⌈log3lgn⌉;
-
令
g(n)=lgn−lglgn,有
f2∗(n)=g1∗(lgn)。显然,g1∗(n)≥⌈lgnn−1⌉。
令
t=g1∗(n),我们知道,t
是满足
lgg0(n)+lgg1(n)+⋯+lggt−1(n)≥n−1
的最小整数。函数
x/g(x)
在
(e,+∞)
上单调递增,且
gt−1(n)>e,因此对于
i∈[0,t−3]∩Z,lggi(n)−lggi+1(n)<lggi+1(n)−lggi+2(n),即
lggi(n)>t−1t−i−1lgn。若
t≥2lgnn−1,则
lgg0(n)+lgg1(n)+⋯+lggt−2(n)>2tlgn≥n−1,与
t
是最小满足条件的整数矛盾,因此
t<⌊2lgnn−1⌋。
综上所述,f2∗(n)∈[⌈lglgnlgn−1⌉,⌊2lglgnlgn−1⌋)。
4-4
-
[zi]F(z)=Fi[zi](z+zF(z)+z2F(z))=⎩⎨⎧1F0Fi−2+Fi−1i=0i=1i≥2=Fi
-
由 a
可知,(1−z−z2)F(z)=z,因此
F(z)=1−z−z2z=(1−ϕz)(1−ϕ^z)z=51(1−ϕz1−1−ϕ^1z)
-
1−ϕz11−ϕ^z1=i=0∑+∞ϕizi=i=0∑+∞ϕ^izi
因此
F(z)=i=0∑+∞51(ϕi−ϕ^i)zi
-
由 c
可知,Fi=51(ϕi−ϕ^i),因为
Fi
是整数且
51ϕ^i<21,所以
Fi
为
51ϕi
舍入到最近的整数。
4-5
-
坏芯片选择一个所有坏芯片的子集,子集内部的芯片互相报告为好芯片,同时将子集外的芯片报告为坏芯片,这时从结果来看,这个子集内的坏芯片和好芯片是完全等价的;
-
-
将
n
个芯片分为
⌊2n⌋
对,若
n
为奇数则有一个芯片
C
不在任何一对里;
-
对这
⌊2n⌋
对芯片依次检测,若两个芯片都报告对方是好的,则任意抛弃一个,否则将两个芯片都抛弃;
-
若
n
为奇数且除了
C,存在其他芯片未被抛弃,则抛弃
C。
这一过程之后芯片数量减少到至多
⌊2n⌋
个,同时好芯片数量超过一半的性质依然存在。
-
最坏情况下的比较次数
T(n)={0T(⌊2n⌋)+⌊2n⌋n=1n≥2
一方面,T(n)≥⌊2n⌋=Ω(n),另一方面,对
T(n)
使用数学归纳法,假设对于所有
m<n
都有
T(m)≤m
成立,T(n)≤⌊2n⌋+⌊2n⌋≤n,因此
T(n)=O(n)。综上,T(n)=Θ(n)。
4-6
-
必要性是显然的,我们来讨论充分性。
条件变形得到
A[i][j]−A[i][j+1]≤A[i+1][j]−A[i+1][j+1],由不等式的传递性,对于
k>i,A[i][j]−A[i][j+1]≤A[k][j]−A[k][j+1]。再次变形得到
A[i][j]−A[k][j]≤A[i][j+1]−A[k][j+1],由不等式的传递性,对于
i<k,j<l,A[i][j]−A[k][j]≤A[i][l]−A[k][l],即
A[i][j]+A[k][l]≤A[k][j]+A[i][l];
-
记该 Monge 矩阵为
M。因为
M
是 Monge 矩阵,对于
j<k,M[i][j]−M[i][k]≤M[i+1][j]−M[i+1][k]。假设存在
i∈[1,m),f(i)>f(i+1),由于
M[i+1][f(i+1)]
是第
i+1
行的最左最小值,M[i+1][f(i+1)]−M[i+1][f(i)]≤0,因此
M[i][f(i+1)]−M[i][f(i)]≤0,与
M[i][f(i)]
是第
i
行的最左最小值矛盾,因此
f(1)≤f(2)≤⋯f(m);
-
-
T(m,n)=T(⌊2m⌋,n)+Θ(m+n)=Θ(m+nlogm)
5-1
-
记事件
Atx
为进行
INCREMENT
操作
t
次后
i=x。
Pr{Atx}=(1−nx+1−nx1)Pr{At−1,x}+nx−nx−11Pr{At−1,x−1}E[it]=x=1∑+∞Pr{Atx}×nx=x=1∑+∞((1−nx+1−nx1)×Pr{At−1,x}×nx+nx−nx−11×Pr{At−1,x−1}×nx)=x=1∑+∞((1−nx+1−nx1)×Pr{At−1,x}×nx+nx+1−nx1×Pr{At−1,x}×nx+1)=x=1∑+∞(nx+1)Pr{At−1,x}=E[it−1]+1
因此
E[it]=t。
-
因为
ni=100i,所以每次执行
INCREMENT
时,计数器有
1/100
的概率增加 1。因此
Pr{Atx}=(xt)1001x10099t−xD[in]=x=0∑nPr{Anx}(nx−E[in])2=x=0∑n(xn)1001x10099n−x(100x−n)2=x=0∑n(xn)1001x10099n−x(10000x(x−1)+(10000−200n)x+n2)=n(n−1)+(100−2n)n+n2=99n
更一般的,ni=di
时
D[in]=(d−1)n。
5-2
-
显然,最坏情形下
DETERMINISTIC-SEARCH
要访问
n−k+1
个下标。平均情形下,记
X
为算法访问的下标个数,事件
Ai
为算法访问了
A[1]
到
A[i]
并且没有结束,
Pr{Ai}=(kn)(kn−i)E[X]=1+i=1∑n−1Pr{Ai}=1+(kn)1i=1∑n−1(kn−i)=1+(kn)1i=1∑n−1(ki)=1+(kn)(k+1n)=k+1n+1