算法基礎

1、基本概念
算法

問題:須要回答的通常性提問,一般含若干參數。ide

算法:有限條指令的集合,肯定某個問題的運算或操做的序列。函數

最壞狀況時間複雜度:求解規模爲n的實例所需最長時間w(n)spa

平均狀況時間複雜度:求解規模爲n的實例所須要平均時間w(n)orm

2、數學基礎排序

1函數漸近的界遞歸

定義1.1fg是定義域爲天然數N上的函數。數學

(1)若存在正整數cn0,使得對一切nn0有0f(n)cg(n)成立,則稱f(n)的漸近it

 

的上界是g(n),記做f(n)=O(g(n))基礎

 

(2)若存在正整數cn0,使得對一切nn00cg(n)f(n)成立,則稱f(n)的漸近

 

的上界是g(n),記做f(n)=(g(n))

 

(3)若對於任意的正整數c都存在n0,使得當n≥n00f(n)<cg(n)成立,則記f(n)=o(g(n))

 

(4)若對於任意的正整數c都存在n0,使得當nn00cg(n)<f(n)成立,則記f(n)=ω(g(n))。

 

(5)若f(n)=O(g(n))f(n)=Ω(g(n)),則記做f(n)=Θ(g(n))

定理1.1fg是定義域爲天然數的集合



定理1.2f,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)

根據定義存在某個常數c1n1,對全部的n≥n1,有f(n)≤c1g(n)。相似的,存在某個常數c2n2,對全部的n≥n2,有g(n)≤c2h(n)。令n0=max{n1,n2},當n≥n0時有f(n)≤c1g(n)≤c1c2h(n),所以f=O(h)

定理1.3  假設fg是定義域爲天然數集合的函數,若對某個其它函數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),由於對於全部的n0,有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主定理 設a1,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

顯然只要c3/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)

相關文章
相關標籤/搜索