算法概念介紹及舉例說明.ppt
《算法概念介紹及舉例說明.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《算法概念介紹及舉例說明.ppt(197頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、例子:給定兩個(gè)正整數(shù)m和n,求它們的最大公因子 算法:歐幾里德算法 輸入:正整數(shù)m、n 輸出:m和n的最大公因子,第一章 算法引論,1.1 算法的基本概念,一、什么是算法及其與程序的區(qū)別,S1:保證m=n,如果m 2、限步之后結(jié)束,且每一步都可在有窮時(shí)間內(nèi)完成.,算法與程序的區(qū)別: 程序:與某種語言有關(guān),能直接在機(jī)器上運(yùn)行。 算法:與特定的語言無關(guān),可用任何語言實(shí)現(xiàn) ,甚至可以用自然語言實(shí)現(xiàn),但是一般為了避免二義性,本書采用類C語言描述。,一個(gè)算法總是在執(zhí)行了有窮步驟的運(yùn)算后終止,否則就是一個(gè)計(jì)算過程。,有窮性與有效性的關(guān)系:,三、評(píng)價(jià)算法的標(biāo)準(zhǔn),有窮性是對(duì)算法的基本要求,如果一個(gè)算法要能使用,必須具有有效性。有效性是指算法在規(guī)定的時(shí)間里終止。,時(shí)間復(fù)雜性和空間復(fù)雜性,1.2 算法設(shè)計(jì)的步驟,一、問題的描述,例:貨郎擔(dān)問題 設(shè)售貨員在一天內(nèi)要到5個(gè)城市去推銷貨物,已知從一個(gè)城市到其他城市的費(fèi)用,求總費(fèi)用最少 3、的路線。給出的信息主要有五個(gè)城市的關(guān)系圖及相應(yīng)的費(fèi)用矩陣。,二、模型的擬制 建模階段至少要考慮以下兩個(gè)基本問題: 1)最適合于這個(gè)問題的數(shù)學(xué)結(jié)構(gòu)是什么? 2)有沒有已經(jīng)解決了的類似問題可供借鑒?,在模型建立好了以后,應(yīng)該依據(jù)所選定的模型對(duì)問題重新陳述,并考慮下列問題:,(1)模型是否清楚地表達(dá)了與問題有關(guān)的所有重要的信息? (2)模型中是否存在與要求的結(jié)果相關(guān)的數(shù)學(xué)量? (3)模型是否正確反映了輸入、輸出的關(guān)系? (4)對(duì)這個(gè)模型處理起來困難嗎?,對(duì)于貨郎擔(dān)問題,其數(shù)學(xué)模型是帶權(quán)圖,與此圖相關(guān)的是費(fèi)用矩陣。,以貨郎擔(dān)問題為例:采用枚舉法。 分析:,三、算法的詳細(xì)設(shè)計(jì),算法的詳細(xì)設(shè)計(jì)是指設(shè) 4、計(jì)求解某個(gè)具體問題的一系列步驟,并且這些步驟可以通過計(jì)算機(jī)的各種操作來實(shí)現(xiàn)。,輸入:城市數(shù)目n;費(fèi)用矩陣C=(cij)n*n 輸出:旅行路線TOUR;最小費(fèi)用MIN,Salesman (n) i 1;tour0;min while i<=(n-1)! do pPHRMUTI(n-1,i); // PHRMUTI(n-1,i)是生成1到n-1的第i個(gè)排列的子過程 cost(T(p))EFP(c,T(p)); // EFP(c,T)是由費(fèi)用矩陣c及路線T(p)所算得的總費(fèi)用 if cost(T(p)) 5、 ii+1; print min, tour,四、算法的正確性 可以分兩步考慮: (1)算法的終止性; (2)算法的每一步是否都正確 算法的正確性并不蘊(yùn)涵算法的有效性。,,五、算法分析 時(shí)間復(fù)雜性和空間復(fù)雜性 以上貨郎擔(dān)問題的時(shí)間復(fù)雜性是:O(n!),六、文檔的編制,,(1)注釋 (2)算法的流程圖 (3)對(duì)輸入/輸出的要求 (4)正確性證明 (5)時(shí)間復(fù)雜性和空間復(fù)雜性的分析,,二、算法分析的要點(diǎn) 1、確定使用的運(yùn)算和執(zhí)行這些運(yùn)算所用的時(shí)間。 運(yùn)算分為兩類 (1)基本運(yùn)算;(2)“組合”運(yùn)算由基本運(yùn)算組成。,,1.3 算法分析,一、算法分析的原因 1、為了對(duì)算法的某些特定的輸 6、入,估計(jì)或限界該算法所需要的空間和運(yùn)行時(shí)間。 2、為了建立衡量算法優(yōu)劣的標(biāo)準(zhǔn),用以比較同一問題的不同算法。,時(shí)間是固定量,時(shí)間是變化量,,2、確定能反映出算法在各種情況下工作的數(shù)據(jù)集構(gòu)造出能產(chǎn)生最好、最壞和有代表性情況的數(shù)據(jù)配置。,,三、算法分析的兩個(gè)階段,1、事前分析求出該算法的一個(gè)時(shí)間限界函數(shù)。,,2、事后測試收集此算法的執(zhí)行時(shí)間和實(shí)際占用空間的統(tǒng)計(jì)資料。,,就算法分析而言,一條語句的數(shù)量級(jí)指的是執(zhí)行它的頻率,而一個(gè)算法的數(shù)量級(jí)則指的是它所有語句執(zhí)行頻率的和。 確定一個(gè)算法的數(shù)量級(jí)是十分重要的,它在本質(zhì)上反映了一個(gè)算法所需要的計(jì)算時(shí)間。,,四、計(jì)算時(shí)間的漸進(jìn)表示 假設(shè)某種算法的計(jì)算時(shí)間 7、是f(n),其中變量n可以是輸入或輸出量,也可以是兩者之和,還可以是它們之一的某種測度(例如,數(shù)組的維數(shù),圖的邊數(shù)等等)。g(n)是在事前分析中確定的某個(gè)形式很簡單的函數(shù),例如,nm,logn,2n,,n!等。它是獨(dú)立于機(jī)器和語言的函數(shù),而f(n)則與機(jī)器和語言有關(guān)。,定義1.2 如果存在兩個(gè)正常數(shù)c和n0,對(duì)于所有的nn0, |f(n)|c|g(n)| 則記作f(n)=(g(n)). 因此,當(dāng)說一個(gè)算法具有O(g(n))的計(jì)算時(shí)間時(shí),指的是如果此算法用n值不變的同一類數(shù)據(jù)在某臺(tái)機(jī)器上運(yùn)行時(shí),所用的時(shí)間總是小于|g(n))|的一個(gè)常數(shù)倍。所以g(n)是計(jì)算時(shí)間f(n)的一個(gè)上界函數(shù), 8、f(n)的數(shù)量級(jí)就是g(n)。,定義1.1:算法中基本操作重復(fù)執(zhí)行的次數(shù)是問題規(guī)模n的某個(gè)函數(shù)f(n),算法的時(shí)間度量記作:T(n)O(f(n)) 隨著問題規(guī)模n的增大,算法執(zhí)行時(shí)間的增長率和f(n)的增長率相同,稱作算法的漸近時(shí)間復(fù)雜度,簡稱時(shí)間復(fù)雜度。,證明:取n0=1,當(dāng)n=n0時(shí),利用A(n)的定義和 一個(gè)簡單的不等式,有 取c=|am|+.+|a0| 定理得證. 事實(shí)上,只要將n0取得足夠大,可以證明只要c是比|am|大的任意一個(gè)常數(shù),此定理都成立。,定理1.1 若A(n)=amnm++ a1n+ a0是一個(gè)m次多項(xiàng)式,則A(n)=O(nm)。,此定理表明,變量n的固定階數(shù)為m的任 9、一多項(xiàng)式,與此多項(xiàng)式的最高階nm同階,因此計(jì)算時(shí)間為m階的多項(xiàng)式的算法,其時(shí)間都可用O(nm).例如,若一個(gè)算法有數(shù)量級(jí)為c1nm1, c2nm2,, cknmk 的k個(gè)語句,則此算法的數(shù)量級(jí)就是 c1nm1 +c2nm2++cknmk 由定理1.1,它等于O(nm),其中m=maxmi|1i k,例子:假設(shè)有解決同一個(gè)問題的兩個(gè)算法,它們有n個(gè)輸 入,分別要求n2和nlogn次運(yùn)算。,定義1.3 如果存在兩個(gè)正常數(shù)c和n0,對(duì)于所有n n0,有 |f(n)| c|g(n)| 則記為f(n)=(g(n))。 定義1.4 如果存在兩個(gè)正常數(shù)c1 ,c2,和n0,對(duì)于所有的n n0, 10、有 則記為f(n)=(g(n))。 一個(gè)算法的f(n)=(g(n))意味著該算法在最好和最壞情況下的計(jì)算時(shí)間就一個(gè)常因子范圍內(nèi)而言是相同的。,五、算法分類(按時(shí)間) 多項(xiàng)式時(shí)間算法:凡可用多項(xiàng)式來對(duì)其計(jì)算時(shí)間界限的算法。 指數(shù)時(shí)間算法:計(jì)算時(shí)間用指數(shù)函數(shù)界限的算法。,以下六種計(jì)算時(shí)間的多項(xiàng)式時(shí)間算法是最為常見的,其關(guān)系為: O(1)< O(logn)< O(n)< O(nlogn)< O(n2)< O(n3) 指數(shù)時(shí)間算法一般有O(2n)、O(n!) 和O(nn)等。其關(guān)系為 O(2n)< O(n!)< O(nn),注意:當(dāng)數(shù)據(jù)集的規(guī)模很大時(shí),要在現(xiàn)代計(jì)算機(jī)上運(yùn)行具有比O(nlogn 11、)復(fù)雜度高的算法往往是很困難的。,六、最好、最壞和平均情況 以順序檢索為例,第二章 分治法 2.1 方法概述,一、基本思想 1、設(shè)計(jì)思想:將整個(gè)問題分成若干個(gè)小問題后,分而治之。 2、適用條件: 問題規(guī)模很大; 可以分成若干個(gè)與原問題性質(zhì)相同的子問題,并可以分別求解。 子問題的解通過整合可以得到原問題的解。 3、設(shè)計(jì)方法:使用遞歸策略。,4、 設(shè)計(jì)步驟 (1)分解:將原問題分解為若干個(gè)相互獨(dú)立、與原問題形式相同的子問題; (2)求解:若子問題容易被解決則直接解,否則再繼續(xù)分解為更小的子問題,直到容易解決; (3)合并:將已求解的各個(gè)子問題的解,逐步合并以得到原問題的解。,二、分治法的算法 12、設(shè)計(jì)模式 Divide-and-Conquer(n) //n為問題規(guī)模 1if n <= n0 //n0 為可解子問題的規(guī)模 2then 3 4 解子問題 5 return( 子問題的解 ) 6 4for i 1 to k //分解為k個(gè)子問題5 do yi Divide-and-Conquer(|Pi|)//遞歸解決Pi6 T MERGE(y1,y2,...,yk) //合并子問題 7 return T,,遞歸過程,注意:分治法可以用遞歸實(shí)現(xiàn),也可以用循環(huán)實(shí)現(xiàn)。,其中:其中|P|表示問題P的規(guī)模;n0為一閾值,表示當(dāng)問題P的規(guī)模不超過n0時(shí),問題已容易直接解出,不必再繼續(xù)分解。算法MERGE 13、(y1,y2,...,yk)是該分治法中的合并子算法,用于將P的子問題P1 ,P2 ,...,Pk的相應(yīng)的解y1,y2,...,yk合并為P的解。,時(shí)間復(fù)雜性分析:,其中,T(n)是輸入規(guī)模為n的Divide-and-Conquer的時(shí)間,g(n)是對(duì)足夠小的輸入規(guī)模能直接計(jì)算出答案的時(shí)間,f(n)是MERGE的時(shí)間。,倘若所分成的兩個(gè)子問題的輸入規(guī)模大致相等,則Divide-and-Conquer總的計(jì)算時(shí)間可以用下面的遞推關(guān)系來表示: (n足夠小) (否則),,,2.2 二 分 檢 索,一、問題描述 已知一個(gè)按非降次序排列的元素表a1,a 14、2,an,要求判定某給定元素x是否在該表中出現(xiàn)。若是,則找出x在表中的位置,并將此下標(biāo)值賦給變量j;若非,則將j置成0。,,,,,對(duì)于I2,通過比較x和ak容易得到解決。如果x= ak,則j=k且不需再對(duì)I1和I3求解;否則,在I2 子問題的j=0,此時(shí)若xak,只有I3留待求解,在I1子問題中的j=0。在ak作了比較之后,留待求解的問題(如果有的話)可以再一次使用分治法來求解。如果對(duì)所求解的問題(或子問題)所選的下標(biāo)k都是其元素的中間元素下標(biāo)(例如,對(duì)于I,k=(n+1)/2),則所產(chǎn)生的算法就是通常所說的二分檢索。,三、二分檢索算法 算法2.3 二分檢索 //給定一個(gè)按非降次序排列的元素 15、數(shù)組A(1:n),n1,判 斷x是否出現(xiàn)。若是,置j,使得x=A(j),若非,j=0// BINSEARCH(A,n,x) 1 low 1 2 high n,,3 while lowhigh,數(shù)組A中沒有找到x,返回j0 4 do 5 6 //取處于low和high之間的中間值 7 if x==Amid//找到值為x的元素,mid即為其下標(biāo),返回mid 8 thenreturn mid 9 else if x < Amid//如果x < Amid,則x可能位于low與mid之間, 10 //否則x可能位于mid與high之間 11 then high mid - 1 12 else 16、 low mid + 1 13 14 retrun 0,非遞歸形式,,,四、算法的證明 假定在A9中順序存放著以下9個(gè)元素:-15,-6,0,7,9,23,54,82,101。要求檢索下列x的值:101,-14和82是否在A中出現(xiàn)。,,從算法中可以看到,所有的運(yùn)算基本上都是進(jìn)行比較和數(shù)據(jù)傳送,前兩條是賦值語句,頻率計(jì)數(shù)均為1。在while循環(huán)中,我們集中考慮循環(huán)的次數(shù),而其他運(yùn)算的頻率計(jì)數(shù)顯然與這些元素比較運(yùn)算的頻率計(jì)數(shù)具有相同的數(shù)量級(jí),找到這九個(gè)元素中的每一個(gè)所需的元素循環(huán)的次數(shù)如下:,五、時(shí)間復(fù)雜性分析 (1) 17、 (log n) (log n) (log n) (log n) (log n),分析:對(duì)于A中的n個(gè)數(shù),如果x在A中出現(xiàn),則是成功檢索,所以成功檢索共有n種情況,而不成功的檢索,x將取n+1個(gè)區(qū)間中的不同值,因此在計(jì)算出x在這2n+1種情況下的執(zhí)行時(shí)間后,就可以求出其在各種情況下的時(shí)間復(fù)雜性了。,例子:A: (1) (2) (3) (4) (5) (6) (7) (8 ) (9 ) 元素: -15 -6 0 7 9 23 54 82 101 比較次數(shù): 3 2 3
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案