本章思考题证明太繁琐,因此只证明某一些,其余的可类似证明。
思考题3-1
本题只证明前两个,后面可类似得到。
首先,很容易想到
p(n)=Θ(nd)
,若
k≥d
,则
Θ(nd)=O(nk)
,若
k≤d
,则
Θ(nd)=Ω(nk)
。
现在来证明
p(n)=O(nd)
。设
c=ad+b
使得
两边同时除以 nd 有:
选 b=1 , n0=max(dad−1,dad−2−−−−√,…,da0−−√d)
我们有
n0
和
c
使得
我们得到了
O(nd)
的定义,若选
b=−1
可类似得到
Ω(nd)
,因此得到
Θ(nd)
。
前三问得证。后面两问可类似证明。
思考题3-2
基本上都可以用洛必达法,下面只给出结果。
A | B | O | o | Ω | ω | Θ |
---|---|---|---|---|---|---|
lgkn | nε | 是 | 是 | 否 | 否 | 否 |
nk | cn | 是 | 是 | 否 | 否 | 否 |
n−−√ | nsinn | 否 | 否 | 否 | 否 | 否 |
2n | 2n/2 | 否 | 否 | 是 | 是 | 否 |
nlgc | clgn | 是 | 否 | 是 | 否 | 是 |
lg(n!) | lg(nn) | 是 | 否 | 是 | 否 | 是 |
思考题3-3
a) 首先化简其中几个式子。
在此省略公式编辑,故从左到右,从上到下依次编号为 1,2,…,30 。复杂度从低到高依次为:
说明:大括号内部表示复杂度一样。
b) f(n)=22(n+1)sinx
思考题3-4
a) 错误,
n=O(n2)
,反过来就不是。
b) 错误,反例:
n,n2
。
c) 正确, 由题得 :
∃c,n0:∀n≥n0:0≤f(n)≤cg(n)⇒ 0≤lgf(n)≤lg(cg(n))=lgc+lgg(n)
现在需要证明 lgf(n)≤dlgg(n) ,由于 lgg(n)≥1 ,只需证明 d≥lgf(n)lgg(n) ,很容易得到 d :
d) 错误,反例 f(n)=2n,g(n)=n 。
e) 错误,当 f(n)<1 时即错。
f) 正确,由题得 0≤f(n)≤cg(n) ,要证明 0≤df(n)≤g(n) ,取 d=1/c 即可。
g) 错误,反例 f(n)=2n 。
h) 正确, f(n)+o(f(n))=Θ(max(f(n),o(f(n))))=Θ(f(n)) 。
思考题3-5
a) 比较
cg(n)≤f(n)
,要么对无穷多个整数成立,要么对有限个成立,若前者成立,则有
Ω∞
。若后者成立,则有
n0
使得
∀n>n0:f(n)<cg(n)
。若
f(n)=g(n)
则两者都成立。
换成
Ω
则不成立,如
n=Ω∞(nsinn)
,但
n≠Ω(nsinn)
b) 优点:可以刻画所有函数之间的关系;
缺点:刻画不精确。
c) 对于任意两个函数 f(n) 和 g(n) ,若有 f(n)=Θ(g(n)) 则有 f(n)=Ω(g(n)) 和 f(n)=O′(g(n)) 。
d) Ω∞(g(n))={f(n):存在正常数c,k,n0使得∀n≥n0有0≤cg(n)lgk(n)≤f(n)}
Θ~={f(n):∃c1,c2,k1,k2,n使得∀n≥n0有0≤c1g(n)lgk1(n)≤f(n)≤c2g(n)lgk2(n)}
对于任意两个函数 f(n) 和 g(n) ,我们有 f(n)=Θ~(g(n)) ,当且仅当 f(n)=O~(g(n)) 且 f(n)=Ω~(g(n)) 。
思考题3-6
f(n) | c | f∗c(n) |
---|---|---|
n−1 | 0 | n |
lgn | 1 | |
n/2 | 1 | |
n/2 | 2 | |
n−−√ | 2 | |
n−−√ | 1 | 不收敛 |
2 | ||
n/lgn | 2 |