1. 程式人生 > >演算法導論課後習題解析 第三章

演算法導論課後習題解析 第三章

3.1-1
分情況討論
f(n)g(n)f(n)≥g(n)時,max(f(n),g(n))=f(n)max(f(n),g(n))=f(n),存在c1=12,c2=1,n0>0c1=12,c2=1,n0>0使得

0<c1(f(n)+g(n))f(n)c2(f(n)+g(n))nn00<c1(f(n)+g(n))≤f(n)≤c2(f(n)+g(n))對於所有n≥n0 同理可證當g(n)>f(n)g(n)>f(n)的情況

3.1-2
(n+a)b=nb+c1nb1+c2nb2++ab=θ(nb)(n+a)b=nb+c1nb−1+c2nb−2+⋯+ab=θ(nb)


3.1-3
大O表示法用來表示一個演算法複雜度的上界,而“至少”一詞用來形容下界,所以這句話的意思是該演算法複雜度的上界只要不小於O(n2)O(n2)即可,相當於沒有說明演算法的複雜度的界限,沒有意義。


3.1-4
2n+1=O(2n)2n+1=O(2n)
證明:存在c=2,n0>0c=2,n0>0使得

02n+1c2nnn00≤2n+1≤c2n對於所有n≥n0 22nO(2n)22n≠O(2n)
證明:假設存在c,n0c,n0使得 022nc2nnn02n2nc2n2nc0≤22n≤c2n對於所有n≥n0⇒2n∗2n≤c2n⇒2n≤c
由於不存在常數c使得等式成立,故產生矛盾,得證。

3.1-5
利用定義就可以直接證明


3.1-6
最壞情況下複雜度為O(g(n))O(g(n))說明所有情況時間複雜度為O(g(n))O(g(n)),最好情況下時間複雜度為Θ(g(n))Θ(g(n))說明所有情況時間複雜度為Ω(g(n))Ω(g(n)),根據定理3.1得演算法時間複雜度為Θ(g(n))Θ(g(n))


3.1-7
f(n)=o(g(n))f(n)=o(g(n))說明對於任意正常數c,n0c,n0,對於所有的nn0n≥n0都有

0f(n)<cg(n)nn00≤f(n)<cg(n)對於所有n≥n0
這時假設f(n)=ω(g(n))f(n)=ω(g(n)),說明對於任意正常數c,n0c,n0,對於所有的nn0n≥n0都有 0cg(n)<f(n)0≤cg(n)<f(n) 然而這樣的常數c是存在的,故產生矛盾,可得o(g(n))ω(g(n))=Φo(g(n))∩ω(g(n))=Φ

3.1-8

Ω(g(m,n))={f(m,n):c,n0,m0使0cg(n,m)f(n,m)nn0mm0}Ω(g(m,n))={f(m,n):存在大於零的常數c,n0,m0使得0≤cg(n,m)≤f(n,m)對於所有n≥n0或m≥m0} Θ(g(m,n))={f(m,n):c1,c2,n0,m0使0c1g(n,m)f(n,m)c2g(n,m)nn0mm0}Θ(g(m,n))={f(m,n):存在大於零的常數c1,c2,n0,m0使得0≤c1g(n,m)≤f(n,m)≤c2g(n,m)對於所有n≥n0或m≥m0}

3.2-1
由於f(n)和g(n)單調遞增,所以對於任意x1<x2x1<x2,都有

f(x1)<f(x2