算法設計與分析電子教案第1章算法引論_第1頁
算法設計與分析電子教案第1章算法引論_第2頁
算法設計與分析電子教案第1章算法引論_第3頁
算法設計與分析電子教案第1章算法引論_第4頁
算法設計與分析電子教案第1章算法引論_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、中國計算機學會中國計算機學會“21“21世紀大學本科計算機專業(yè)系列教材世紀大學本科計算機專業(yè)系列教材”算法設計與分析算法設計與分析王曉東王曉東編著編著1主要內(nèi)容介紹主要內(nèi)容介紹 第1章算法引論 第2章遞歸與分治策略 第3章動態(tài)規(guī)劃 第4章貪心算法 第5章回溯法 第6章分支限界法2主要內(nèi)容介紹(續(xù))主要內(nèi)容介紹(續(xù)) 第7章概率算法 第8章NP完全性理論 第9章近似算法 第10章 算法優(yōu)化策略3第第1 1章章 算法引論算法引論 1.1 算法與程序 1.2 表達算法的抽象機制 1.3 描述算法 1.4 算法復雜性分析本章主要知識點:41.1 算法與程序算法與程序 輸 入:有零個或多個外部量作為算法

2、的輸入。 輸 出:算法產(chǎn)生至少一個量作為輸出。 確定性:組成算法的每條指令清晰、無歧義。 有限性:算法中每條指令的執(zhí)行次數(shù)有限,執(zhí)行每條指令的時間也有限。是算法用某種程序設計語言的具體實現(xiàn)。 程序可以不滿足算法的性質(zhì)(4)即有限性。 是滿足下述性質(zhì)的指令序列。算法:程序:51.從機器語言到高級語言的抽象1.2 表達算法的抽象機制表達算法的抽象機制高級程序設計語言的主要好處是:(4)把繁雜瑣碎的事務交給編譯程序,所以自動化程度高,開發(fā)周期短,程序員可以集中時間和精力從事更重要的創(chuàng)造性勞動,提高程序質(zhì)量。(1)高級語言更接近算法語言,易學、易掌握,一般工程技術人員只需 要幾周時間的培訓就可以勝任程

3、序員的工作;(2)高級語言為程序員提供了結構化程序設計的環(huán)境和工具,使得設計出來的程序可讀性好,可維護性強,可靠性高;(3)高級語言不依賴于機器語言,與具體的計算機硬件關系不大,因而所寫出來的程序可植性好、重用率高;62.抽象數(shù)據(jù)類型1.2 表達算法的抽象機制表達算法的抽象機制 抽象數(shù)據(jù)類型是算法的一個數(shù)據(jù)模型連同定義在該模型上并作為算法構件的一組運算。 抽象數(shù)據(jù)類型帶給算法設計的好處有: (1)算法頂層設計與底層實現(xiàn)分離;(2)算法設計與數(shù)據(jù)結構設計隔開,允許數(shù)據(jù)結構自由選擇;(3)數(shù)據(jù)模型和該模型上的運算統(tǒng)一在ADT中,便于空間和時間耗費的折衷;(4)用抽象數(shù)據(jù)類型表述的算法具有很好的可維

4、護性;(5)算法自然呈現(xiàn)模塊化;(6)為自頂向下逐步求精和模塊化提供有效途徑和工具;(7)算法結構清晰,層次分明,便于算法正確性的證明和復雜性的分析。 7在本書中,采用Java語言描述算法。1.1.JavaJava程序結構程序結構 1.3 描述算法描述算法以下,對JavaJava語言的若干重要特性作簡要概述。 (1)Java程序的兩種類型:應用程序和appletapplet區(qū)別:應用程序的主方法為main,其可在命令行中用命令語句 java 應用程序名 來執(zhí)行;applet的主方法為init,其必須嵌入HTML文件,由Web瀏覽器或applet閱讀器來執(zhí)行。(2)包:java程序和類可以包(p

5、ackages)的形式組織管理。 (3)import語句:在java程序中可用import語句加載所需的包。例如,import java.io.*;語句加載java.io包。 81.3 描述算法描述算法2.2.JavaJava數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型 基本數(shù)據(jù)類型:詳見下頁表1-1 非基本數(shù)據(jù)類型:如 Byte, Integer, Boolean, String等。 Java對兩種數(shù)據(jù)類型的不同處理方式: 對基本數(shù)據(jù)類型:在聲明一個具有基本數(shù)據(jù)類型的變量時,自動建立該數(shù)據(jù)類型的對象(或稱實例)。如:int k;對非基本數(shù)據(jù)類型:語句 String s; 并不建立具有數(shù)據(jù)類型String的對象,

6、而是建立一個類型String的引用對象,數(shù)據(jù)類型為String的對象可用下面的new語句建立。 s = new StringString(“Welcome”);StringString s = new StringString(“Welcome”);91.3 描述算法描述算法表格表格1-1 1-1 JavaJava基本數(shù)據(jù)類型基本數(shù)據(jù)類型101.3 描述算法描述算法3.3.方法方法在Java中,執(zhí)行特定任務的函數(shù)或過程統(tǒng)稱為方法(methods) 。例如,java的MathMath類類給出的常見數(shù)學計算的方法如下表所示:111.3 描述算法描述算法3.3.方法方法 2baba計算表達式 值的自

7、定義方法ab描述如下: public static int ab(int a, int b) return (a+b+Math.abs(a-b)/2; (1)方法參數(shù):Java中所有方法的參數(shù)均為值參數(shù)。上述方法ab中,a和b是形式參數(shù),在調(diào)用方法時通過實際參數(shù)賦值。 (2)方法重載:Java允許方法重載,即允許定義有不同簽名的同名方法。上述方法ab可重載為: public static double ab(double a, double b) return (a+b+Math.abs(a-b)/2.0; 121.3 描述算法描述算法4.4.異常異常 Java的異常提供了一種處理錯誤的方法。

8、當程序發(fā)現(xiàn)一個錯誤,就引發(fā)一個異常,以便在合適地方捕獲異常并進行處理。 通常用trytry塊來定義異常處理。每個異常處理由一個catchcatch語句組成。 public static void main(String args) try f ( ); catch (exception1) 異常處理; catch (exception2) 異常處理; finally finally塊; 131.3 描述算法描述算法5.5.JavaJava的類的類(4)訪問修飾訪問修飾公有(public) 私有(private)保護(protected) Java的類一般由4個部分組成:(1)類名類名(2)數(shù)據(jù)

9、成員數(shù)據(jù)成員(3)方法方法141.3 描述算法描述算法6.6.通用方法通用方法 下面的方法swapswap用于交換一維整型數(shù)組a的位置i和位置j處的值。 public static void swap(int a, int i, int j) int temp = ai; ai = aj; aj = temp; public static void swap(object a, int i, int j) object temp = ai; ai = aj; aj = temp; 該方法只適用于該方法只適用于整型數(shù)組整型數(shù)組該方法具有通用性,適用該方法具有通用性,適用于于ObjectObjec

10、t類型及其所有子類型及其所有子類類 以上方法修改如下:以上方法修改如下:151.3描述算法描述算法6.6.通用方法通用方法 (1 1)ComputableComputable界面界面 public static Computable sum(Computable a, int n) if (a.length = 0) return null; Computable sum = (Computable) a0.zero(); for (int i = 0; i n; i+) sum.increment(ai); return sum;利用此界面使利用此界面使方法方法sumsum通用化通用化 16

11、1.3 描述算法描述算法6.6.通用方法通用方法 (2 2)java.lang.Comparable java.lang.Comparable 界面界面 Java的Comparable 界面中惟一的方法頭compareTo用于比較2個元素的大小。例如java.lang.CpareTo(y)返回x-y的符號,當xy時返回正數(shù)。(3 3)OperableOperable 界面界面 有些通用方法同時需要Computable界面和Comparable 界面的支持。為此可定義Operable界面如下:public interface Operable extends Computable, Compar

12、able (4 4)自定義包裝類)自定義包裝類 由于Java的包裝類如Integer等已定義為final型,因此無法定義其子類,作進一步擴充。為了需要可自定義包裝類。 171.3 描述算法描述算法7.7.垃圾收集垃圾收集8.8.遞歸遞歸Java的newnew運算用于分配所需的內(nèi)存空間。例如, int a = new int500000; 分配2000000字節(jié)空間給整型數(shù)組a。頻繁用new分配空間可能會耗盡內(nèi)存。Java的垃垃圾收集器圾收集器會適時掃描內(nèi)存,回收不用的空間(垃圾)給new重新分配。 Java允許方法調(diào)用其自身。這類方法稱為遞歸方法。public static int sum(i

13、nt a, int n) if (n=0) return 0; else return an-1+sum(a,n-1); 計算一維整型數(shù)組前計算一維整型數(shù)組前n n個個元素之和的遞歸方法元素之和的遞歸方法 181.4 算法復雜性分析算法復雜性分析 算法復雜性是算法運行所需要的計算機資源的量,需要時間資源的量稱為時間復雜性時間復雜性,需要的空間資源的量稱為空間復雜性空間復雜性。這個量應該只依賴于算法要解的問題的規(guī)模、算法的輸入和算法本身的函數(shù)。如果分別用N、I和A表示算法要解問題的規(guī)模、算法的輸入和算法本身,而且用C表示復雜性,那么,應該有C=F(N,I,A)。一般把時間復雜性和空間復雜性分開,

14、并分別用T和S來表示,則有: T=T(N,I)和S=S(N,I) 。(通常,讓A隱含在復雜性函數(shù)名當中) 191.4 算法復雜性分析算法復雜性分析最壞情況下的時間復雜性:),(maxmaxINT(N)TNDI),(max1INetkiiiDIN),(*1INetkiii),(*INT最好情況下的時間復雜性:),(minminINT(N)TNDI),(min1INetkiiiDIN),(1INetkiii),(INT平均情況下的時間復雜性:NDIINTIP(N)T),()(avgNDIkiiiINetIP),()(1 其中DN是規(guī)模為N的合法輸入的集合;I*是DN中使T(N, I*)達到Tmax

15、(N)的合法輸入; 是中使T(N, )達到Tmin(N)的合法輸入;而P(I)是在算法的應用中出現(xiàn)輸入I的概率。II201.4 算法復雜性分析算法復雜性分析算法復雜性在漸近意義下的階:漸近意義下的記號:O、o 設f(N)和g(N)是定義在正數(shù)集上的正函數(shù)。 O O的定義的定義:如果存在正的常數(shù)C和自然數(shù)N0,使得當NN0時有f(N)Cg(N),則稱函數(shù)f(N)當N充分大時上有界,且g(N)是它的一個上界,記為f(N)=O(g(N)。即f(N)的階不高于g(N)的階。 根據(jù)O的定義,容易證明它有如下運算規(guī)則: (1)O(f)+O(g)=O(max(f,g); (2)O(f)+O(g)=O(f+g); (3)O(f)O(g)=O(fg); (4)如果g(N)=O(f(N),則O(f)+O(g)=O(f); (5)O(Cf(N)=O(f(N),其中C是一個正的常數(shù); (6)f=O(f)。 211.4 算法復雜性分析算法復雜性分析 的定義的定義:如果存在正的常數(shù)C和自然數(shù)N0,使得當NN0時有f(N)Cg(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論