第1章演算法分析.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第1章演算法分析

Chapter 1 演算法分析 1.1 演算法 1.2 Big-O 演算法分析 演算法是解決一問題的有限步驟,而評斷演算法的優劣可利用Big-O分析之,如O(n)比O(n2)來得佳。 1.1 演算法 演算法(Algorithms)是一解決問題(problems)的有限步驟程序。 舉例來說,現有一問題為:判斷數字x是否在一已排序好的數字串列s中,其演算法為: 從s串列的第一個元素開始,依序的比較,直到x被發現或s串列已達盡頭。假使x被找到,則印出Yes;否則,印出No。 1.1 演算法 當問題很複雜時,上述敘述性的演算法就難以表達出來。因此,演算法大都以類似的程式語言表達之,繼而利用您所熟悉的程式語言執行之。 1.1 演算法 “他的程式寫得比我好嗎?” 應該利用客觀的方法進行比較,而此客觀的方法就是複雜度分析(complexity analysis)。 首先必須求出程式中每一敘述的執行次數(其中{和}不加以計算),將這些執行次數加總起來。然後求出其Big-O。 1.1 演算法 陣列元素相加(Add array members) 1.1 演算法 矩陣相乘(Matrix Multiplication) 1.1 演算法 1.1 演算法 循序搜尋(Sequential search) 1.1 演算法 二元搜尋(Binary search) 1.1 演算法 費氏數列(遞迴的片段程式) 1.1 演算法 費氏數列(非遞迴的片段程式) 1.2 Big-O 如何去計算演算法所需要的執行時間呢?在程式或演算法中,每一敘述(statement)的執行時間為: 此敘述執行的次數, 每一次執行所需的時間,兩者相乘即為此敘述的執行時間。 由於每一敘述所須的時間必需實際考慮到機器和編譯器的功能,因此通常只考慮執行的次數而已。 1.2 Big-O 下列有三個片段程式,請計算x=x+1的執行次數: 1.2 Big-O 在分析演算法時,一般稱敘述的執行次數為order of magnitude,所以上述的(a) 、(b) 、(c)中,x=x+1的order of magnitude分別為1,n,n2。 而整個演算法的order of magnitude為演算法中每一敘述的執行次數之和。 1.2 Big-O 算完程式敘述的執行次數後,通常利用Big-O來表示此演算法執行的時間。 1.2 Big-O 請看下列範例: 3n+2=O(n), ∵我們可找到c=4,n0=2,使得3n+24n 10n2+5n+1=O(n2), ∵我們可以找到c=11,n0=6,使得10n2+5n+111n2 7*2n +n2+n=O(2n), ∵我們可以找到c=8,n0=4,使得7*2n+n2+n8*2n 10n2+5n+1=O(n3), 原來10n2+5n+1 O(n2),而n3又大於n2,理所當然10n2+5n+1=O(n3)是沒問題的。 1.2 Big-O 其實,我們可以加以證明,當 f(n)=amnm +...+a1n+a0 時,f(n)=O(nm) 1.2 Big-O 循序搜尋(sequential search)的情形可分,其平均搜尋到的次數為 1.2 Big-O 二元搜尋法乃是資料已經皆排序好,因此由中間(mid)開始比較,便可知欲搜尋的資料(key)落在mid的左邊還是右邊,再將左邊的中間拿出來與key相比,只是每次要調整每個段落的起始位址或最終位址。 1.2 Big-O 1.2 Big-O 搜尋的次數為log32+1=6,此處的log表示log2。資料量為128個時,其搜尋的次數為log128+1,因此當資料量為n時,其執行的次數為logn+1。 1.2 Big-O 讀者大略可知二元搜尋比循序搜尋好得太多了,其執行敘率為O(logn) 。 費氏數列(Fibonacci number),其定義如下: 1.2 Big-O 1.2 Big-O 1.2 Big-O 1.2 Big-O 當n=3(f3)從上圖可知需計算的項目為5;n=5時,需計算的項目數為15個。因此我們可以下列公式表示: 1.2 Big-O 1.2 Big-O 上述費氏數列是以遞迴的方式算出,其Big-O為O(2n/2 ),若改以非遞迴方式計算的話,其f(n)執行的項目為n+1項。 從上表得知,計算費氏數列若採用遞迴方法並不太適合,所以並不是所有的問題皆適合利用遞迴法,有關遞迴的詳細情形,請參閱第五章。 1.2 Big-O Big-O的圖形表示如下: 1.2 Big-O 例如有一程式的執行次數為n2+10n,則其Big-O為n2,表示此程式執行的時間最壞的情況下不會超過n

文档评论(0)

book1986 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档