1、基本概念
算法
問題:須要回答的通常性提問,一般含若干參數。ide
算法:有限條指令的集合,肯定某個問題的運算或操做的序列。函數
最壞狀況時間複雜度:求解規模爲n的實例所需最長時間w(n)。spa
平均狀況時間複雜度:求解規模爲n的實例所須要平均時間w(n)。orm
2、數學基礎排序
1函數漸近的界遞歸
定義1.1設f和g是定義域爲天然數N上的函數。數學
(1)若存在正整數c和n0,使得對一切n≥n0有0≤f(n)≤cg(n)成立,則稱f(n)的漸近it
的上界是g(n),記做f(n)=O(g(n))。基礎
(2)若存在正整數c和n0,使得對一切n≥n0有0≤cg(n)≤f(n)成立,則稱f(n)的漸近
的上界是g(n),記做f(n)=Ω(g(n))。
(3)若對於任意的正整數c都存在n0,使得當n≥n0有0≤f(n)<cg(n)成立,則記f(n)=o(g(n))。
(4)若對於任意的正整數c都存在n0,使得當n≥n0有0≤cg(n)<f(n)成立,則記f(n)=ω(g(n))。
(5)若f(n)=O(g(n))且f(n)=Ω(g(n)),則記做f(n)=Θ(g(n))
定理1.1設f和g是定義域爲天然數的集合
定理1.2設f,g,h是定義域爲天然數集合的函數
(1)若是f=O(g)且g=O(h),那麼f=O(h)
(2)若是f=Ω(g)且g=Ω(h),那麼f=Ω(h)
(3)若是f=Θ(g)且g=Θ(h),那麼f=Θ(h)
定理1.2 證(3)是(1)(2)的直接結果,(2)證實與(1)相似,僅證(1)
根據定義存在某個常數c1和n1,對全部的n≥n1,有f(n)≤c1g(n)。相似的,存在某個常數c2和n2,對全部的n≥n2,有g(n)≤c2h(n)。令n0=max{n1,n2},當n≥n0時有f(n)≤c1g(n)≤c1c2h(n),所以f=O(h)
定理1.3 假設f和g 是定義域爲天然數集合的函數,若對某個其它函數h,有f=O(h)和g=O(h),那麼f+g=O(h)
推論 假設f和g 是定義域爲天然數集合的函數,且知足g=O(f),那麼f+g=Θ(f)
定理1.3 與1.2相似
定理1.3推論 顯然f+g=Ω(f),由於對於全部的n≥0,有f(n)+g(n)≥f(n)。反之,由g=O(f)以及f=O(f),由定理1.3知f+g=O(f)
定理1.4對每一個b>1和α>0有logbn=o(nα)
定理1.5對每一個r>1和每一個d>0,有nd=o(rn)
定理1.4 1.5 洛必達法則可證
階乘函數f(n)=n!是增加很快的函數,根據斯特靈公式,階乘函數
關於階乘函數有下面結果:
n!=o(nn),n!=ω(2n),log(n!)=Θ(nlogn)
前兩個顯而易見,僅提供第三個證實
2求和方法
常見數列求和方法:
3遞歸方程求解
迭代概括法:從原始方程開始,反覆將左邊函數用左邊等式代入,獲得初值,化簡結果,再代入原方程驗證。
遞歸樹:初始遞歸樹只有一個結點,權標記爲W(n),不斷迭代,直至不含權爲函數的結點爲止。
例 4 用迭代遞歸法求解方程W(n)=2(n/2)+n-1,n=2k,W(1)=0
解 W(n)=2W(2k-1)+2k
=2[2W(2k-2)+2k-1-1]+2k-1
=...=2kW(1)+k2k-(2k-1+2k-2+..+2+1)
=k2k-2k+1
=nlogn-n+1
W(1)=1Xlog1-1+1=0符合初始條件,將結果代入原初始方程右邊得
2W(n/2)+n-1=2[2k-1log2k-1+1]+2k-1
=2k(k-1)-2k+2+2k-1
=k2k-2k+1
=nlogn-n+1=W(n)
例5用遞歸樹求遞推方程T(n)=T(n/3)+T(2n/3)+n
定理1.6主定理 設a≥1,b>1爲常數,f(n)爲函數,T(n)爲非負整數,且T(n)=aT(n/b)+f(n)
則有:
例 6 求遞推方程T(n)=9T(n/3)+n
解 a=9,b=3,f(n)=n,那麼
nlog39=n2,f(n)=O(nlog39-1),至關於主定理(1),故T(n)=Θ(n2)
例 7 求遞推方程T(n)=T(2n/3)+1
解 a=1,b=3/2,f(n)=1,那麼
nlog3/21=n0=1,f(n)=1,至關於主定理(2),故T(n)=Θ(logn)
例 8 求遞推方程T(n)=3T(n/4)+nlogn
解 a=3,b=4,f(n)=nlogn,那麼
nlogn=Ω(nlog43+ε)=Ω(n0.793+ε),ε≈0.2
要使af(n/b)<cf(n)成立,代入f(n)=nlogn,獲得
3n/4log(n/4)≤cnlogn
顯然只要c≥3/4,上式對充分大n成立,至關於主定理(3),故
T(n)=Θ(f(n)=Θ(nlogn)
例 9 插入算法和二分歸併排序算法的時間複雜度
設W(n)表示順序插入算法 InsertSort對於規模爲n的輸入在最壞狀況下所作的比較次數。若是n-1個數已經排好,最壞的狀況下須要將它與前n-1個數中的每個進行1次比較,所以獲得遞推方程
W(n)=W(n-1)+n-1
W(1)=0
由上面的求解知W(n)=n(n-1)/2=O(n2)
爲了簡單起見,不妨設n=2k,k爲天然數。設W(n)表示二分歸併排序算法在最壞狀況下所作的比較次數,那麼對n個數進行二分歸併排序,W(n)知足以下遞歸方程:
W(n)=2W(n/2)+n-1
W(1)=0
由上面的求解知W(n)=O(nlogn)