第1章算法及基礎知識_第1頁
第1章算法及基礎知識_第2頁
第1章算法及基礎知識_第3頁
第1章算法及基礎知識_第4頁
第1章算法及基礎知識_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

算法設計與分析授課教師:王秋芬辦公地點:7307Email:學習算法的重要性算法與日常生活息息相關算法是程序設計的根基學習算法能夠提高分析問題的能力算法是推動計算機行業(yè)發(fā)展的關鍵研究算法是件快樂的事情

學習內容算法及基礎知識貪心法分治法動態(tài)規(guī)劃搜索法隨機化算法線性規(guī)劃和網絡流數論算法及計算幾何算法NP完全性學習方法高度上(思想、策略、宏觀)邏輯上(在策略思想的指導下思考解決方法)實踐上(設計算法、分析算法)實質:理論+實踐第一章算法及基礎知識目錄算法的基本概念算法設計的一般過程算法分析遞歸、基本數據結構、常用數學公式第一章算法及基礎知識教學目標充分理解并掌握算法的相關概念理解算法設計的一般過程掌握對算法復雜性進行分析的方法掌握使用面向對象程序設計語言C++進行算法描述的方法掌握遞歸的概念及運用要點熟悉基本數據結構和數學公式的概念及使用方法算法的定義、特性及描述方式算法的定義(舉例:求N個整數的和)對于計算機科學來說,算法指的是對特定問題求解步驟的一種描述,是若干條指令的有窮序列,且滿足算法的特性。算法的特性輸入、輸出、確定性、有限性、可行性描述方式自然語言、圖形(流程圖)、偽代碼、程序設計語言本書采用了面向對象程序設計語言C++思考:算法與程序的區(qū)別?算法與程序的區(qū)別算法是解決特定問題步驟的描述,程序是解決特定問題的功能代碼;算法一般不能直接到計算機上執(zhí)行,程序是可以直接在計算機上執(zhí)行的;程序是用某種計算機程序設計語言對算法翻譯的結果,算法是程序的精髓、靈魂。程序設計的實質就是構造解決問題的算法。算法設計的一般過程充分理解要解決的問題數學模型擬制算法詳細設計算法描述算法思路的正確性驗證算法分析算法的計算機實現和測試文檔資料的編制例:給定n個整數和一個整數C,問n個數中哪幾個數的和等于C。算法分析算法復雜性:算法運行時所需要的計算機資源的量時間復雜性、空間復雜性時間復雜性(T(n))分析方法事后統計法事前分析估算法影響時間復雜性的因素(板書:查找為例)問題規(guī)模n、輸入序列I、算法本身A影響空間復雜性的因素算法本身、輸入輸出數據、輔助變量三種情況下的復雜性

(例:查找)最好情況Tmin(N)1次最壞情況Tmax(N)N次平均情況Tavg(N)(N+1)/2空間復雜性S(n)存儲算法本身所占用的存儲空間;算法的輸入輸出數據所占用的存儲空間;算法在運行過程中所需的輔助變量占用的存儲空間,即輔助空間或臨時空間

算法漸近復雜性態(tài)設算法的運行時間為T(n),如果存在T*(n),使得

就稱T*(n)為算法的漸進性態(tài)或漸進時間復雜性。舉例說明(見教案)假設算法A的運行時間表達式T1(n)為:

T1(n)=30n4+20n3+40n2+46n+100算法B的運行時間表達式T2(n)為:

T2(n)=1000n3+50n2+78n+10思考:(1)算法A效率高還是算法B效率高?(2)為什么引入算法的漸進復雜性?

簡化漸進復雜性態(tài)的引入漸近意義下的記號(O、、)在下面的討論中,對所有n,f(n)

0,g(n)

0。(1)漸近上界記號O(舉例)O(g(n))={f(n)|存在正常數c和n0使得對所有n

n0有:0

f(n)

cg(n)}例:f(n)=logn2g(n)=5logn用O表示f(n)和g(n)常見幾類時間復雜性O(1):常數階時間復雜性O(n)、O(n2)、O(n3)…:多項式階時間復雜性O(2n)、O(n!)和O(nn):指數階時間復雜性O(nlogn)和O(logn):對數階時間復雜性有用的規(guī)則O(f)+O(g)=O(max(f,g));O(f)+O(g)=O(f+g);O(f)O(g)=O(fg);如果g(n)=O(f(n)),則O(f)+O(g)=O(f);O(Cf(n))=O(f(n)),其中C是一個正的常數;f=O(f)。(2)漸近下界記號

(舉例)

(g(n))={f(n)|存在正常數c和n0使得對所有n

n0有:0

cg(n)

f(n)}(3)漸近精確界記號

(舉例)

(g(n))={f(n)|存在正常數c1,c2和n0使得對所有n

n0有:c1g(n)

f(n)

c2g(n)}定理1:

(g(n))=O(g(n))

(g(n))算法的運行時間T(n)建立的依據非遞歸算法(a)選擇某種能夠用來衡量算法運行時間的依據;(b)依照該依據求出運行時間T(n)的表達式;(c)采用漸進符號表示T(n);(d)獲得算法的漸進時間復雜性,進行進一步的比較和分析。例子11、求n個整數的最小值intarrayMax(inta[n]){intmax=a[0];for(inti=1;i<n;i++)if(a[i]>max)max=a[i];returnmax;}例子22、求n個整數中與給定K相等的元素。intfind(inta[n],intK){for(inti=0;i<n;i++)if(a[i]==K)break;returni;}空間復雜性與時間復雜性的分析方法類似遞歸子程序(或函數)直接調用自己或通過一系列調用語句間接調用自已,稱為遞歸。直接或間接調用自身的算法稱為遞歸算法。采用遞歸算法來求解問題的一般步驟:分析問題,尋找遞歸關系找出停止條件構建函數體(設計遞歸算法,確定參數)n的階乘停止條件遞歸關系

停止條件與遞歸關系是遞歸函數的兩個要素,遞歸函數只有具備了這兩個要素,才能在有限次計算后得出結果。排列問題問題描述n個元素,它們的編號為1,2,…,n,排列問題的目的是生成這n個元素的全排列。算法設計思路將規(guī)模為n的排列問題轉化為規(guī)模為n-1的排列問題。將規(guī)模為n-1的排列問題轉化為規(guī)模為n-2的排列問題將問題規(guī)模一級一級降至1,1個元素的排列是它本身,此時到達遞推的停止條件。數組中的元素即為1個排列,然后進行回歸依次得到其它的排列。排列問題算法描述voidperm(intA[],intk,intn)//k:規(guī)模

{inti;

if(k==1)for(i=0;i<n;i++)cout<<A[i];elsefor(i=n-k;i<n;i++){swap(A[i],A[n-k]);perm(A,k-1,n);swap(A[i],A[n-k]);}}遞歸算法復雜性分析遞歸算法的時間復雜性分析決定采用哪個(或哪些)參數作為輸入規(guī)模的度量;找出對算法的運行時間貢獻最大的語句作為基本語句;檢查一下,對于相同規(guī)模的不同輸入,基本語句的執(zhí)行次數是否不同。如果不同,則需要從最好、最差及平均三種情況進行討論;對于選定的基本語句的執(zhí)行次數建立一個遞推關系式,并確定停止條件;通過計算該遞推關系式得到算法的漸進時間復雜性。遞歸算法的空間復雜性分析遞歸深度以排列問題為例分析遞歸算法的復雜性當k=1時,已構成一個排列,第一個for循環(huán)需要執(zhí)行n次操作將排列輸出;當k=n時,第二個for循環(huán)的循環(huán)體,對perm(A,k-1,n)執(zhí)行n次調用。因此,排序算法perm對應的遞歸定義式為:采用后向代入法計算可得到通項公式:T(n)=nT(n-1)

=......

=n(n-1)(n-2)......2T(1)

=n!

所以,全排列算法perm的時間復雜性為O(n!)?;仡櫝S玫臄祿Y構線性表樹圖集合算法漸近復雜性分析中常用數學公式(1)對數公式(2)組合公式(3)求和公式(4)向下取整和向上取整公式

(1)對數函數

logn=log2n;

lgn=log10n;

lnn=logen;

logkn=(logn)k;loglogn=log(logn);fora>0,b>0,c>0取整函數的若干性質

x-1<x

x

x<x+1;

n/2

溫馨提示

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

評論

0/150

提交評論