第三章 函數的增長
這一部分主要是數學知識,要區分嚴謹的數學和演算法之間的關係。
Θ記號,我自己的理解是函數漸進相等。f(n)=Θ(g(n)),f(n)=g(n),f(n),g(n)最高項次數相同。
O記號,相當於<=,f(n)=O(g(n)),f(n)<=g(n),f(n)最高項次數小於等於g(n).
Ω記號,>=,f(n)=ω(g(n)),f(n)>=g(n),f(n)最高項次數大於等於g(n)
o,<
ω, >
我不知道這麼理解是否準確。
演算法的已耗用時間可能與輸入有關,所以演算法的已耗用時間不一定能用一個函數來準確衡量。例如插入排序,最壞和最好分別是Θ(n^2),Θ(n)。
練習3.1-1
不妨設f(n)>g(n).存在n0,n>n0時,
F(n)+g(n)>= f(n)>=0
2f(n)>=f(n)+g(n)>=0
所以取c1=1/2,c2=1
c1(f(n)+g(n))<=f(n)<=c2(f(n)+g(n))
證畢
3.1-2
C1n^b <= (n+a)^b <= c2n^b
C1 <= (1+a/n)^b <= c2
取 n0 = 2|a|,
C1 <=(1/n)^b(a取負數)
C2 >=2^b
3.1-3
O(n^x)表示漸進上界,至少修飾下界。
3.1-4
2^(n+1) = O(2^n)成立
取c1=3
2^(n+1)<3*2^n
2^(2n)=O(2^n)不成立
2^(2n)=2^n*2^n
C至少是2^n+1 才能保證2^(2n)<c2^n,此時c不是常數
3.1-5
根據定義證。
3.1-6
同上
3.1-7
F(n)=o(g(n))
對任意c1, c1f(n)<=g(n)
H(n)=w(g(n))
對任意c2, g(n)<=c2(h(n))
F(n)=o(g(n))交w(g(n))
對任意c1,c2
c1f(n)<=g(n)<=c2(f(n))
F(n)不存在。
3.1-8
Ω(g(n,m))={f(n,m):存在整數c,n0,m0,使對所有n>=n0,m>=m0,有0<=f(n,m)<=cg(n,m)}
Θ(g(n,m))={f(n,m):存在整數c1,c2,n0,m0,使對所有n>=n0,m>=m0,有0<=c1g(n,m)<=f(n,m)<=c2g(n,m)}
3.2 標準記號和常用函數
介紹了一些記號,和常用的數學函數及性質。
不理解的地方是:為什麼任何底大於1的指數函數比任何多項式函數增長得更快
斯特林近似公式書上貌似給錯了,應該是約等於而不是等於。
有個函數f(n)有多項界的變形:
f(n)=O(n^k) => lgf(n) = O(lgn)
用定義可以證明。
3.2-1
(1)
由f,g單調遞增得到n1 >= n2時f(n1)>=f(n2)且g(n1)>=g(n2)
則F(n1)+g(n2) >= f(n2)+g(n2)
又由g(n1)>=g(n2),f(g(n1))>=f(g(n2))。所以f(n)+g(n)和f(g(n))都是單調遞增
(2)
同上
3.2-2
漸進下界用斯特林近似公式計算
3.2-4
┌┐
利用多項式界的變形:
f(n)=O(n^k) => lgf(n) = Θ(lgn),
如果lg┌lgn┐! = Θ(lgn),則它是多項有界
┌lgn┐! = Θ(lgnlglgn) => ┌lgn┐! = w(lgn) != O(lgn)
(O(f(n)g(n)) => w(f(n)) && w(g(n)))?
lg┌lglgn┐! =Θ(lglgnlglglgn)=o((lglgn)^2)=o(lgn)(把lgn看成多項式x,lg^2 x=o(x))
3.2-5
設n = 2^(2^)(2^……) (i個2)
lg(lg*n) = lgi
Lg*(lgn) = i-1
所以lg*(lgn)漸進大。
3.2-6
3.2-7
思考題3-5
A)反證法:
假設f(n) = Ω無窮大(g(n))不成立,也就是說,只有有限個整數使f(n)>=cg(n)>=0成立
取n0為這些有限個數中最大的一個,n>=n0+1時,cg(n)>=f(n)>=0成立
B)
優點:無法找到Ω(g(n))時,可用Ω無窮大來近似衡配量序已耗用時間
缺點:Ω無窮大的範圍太大,衡量時可能精度不夠
C) |f(n)| = O(g(n)) <=> f(n)=O(g(n))且|f(n)|=Ω(g(n))