Chapter 1 演算法分析 1.1 演算法 1.2 Big-O.

Slides:



Advertisements
Similar presentations
工職數學 第四冊 第一章 導 數 1 - 1 函數的極限與連續 1 - 2 導數及其基本性質 1 - 3 微分公式 1 - 4 高階導函數.
Advertisements

Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
MATLAB 程式設計 時間量測 清大資工系 多媒體資訊檢索實驗室.
Introduction to C Programming
举国上下抗击风雪灾害专刊 温暖行动 灾情告急年关近 万众一心齐抗灾 可歌可泣留千古 温暖行动遍人间 导读提示 阳关雨露出版社
我 爱 数 学 学 校:合肥第71中学/小学部 作 者:沈梦婷 蔡闻天 指导老师:王良侠 第 期.
作文选刊 作文之窗
Introduction 基本概念 授課老師:蕭志明
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
圓的一般式 內容說明: 由圓的標準式展出圓的一般式.
中二數學 第五章 : 二元一次方程 二元一次方程的圖像.
第 九 章 搜尋(Search) 課程名稱:資料結構 授課老師:_____________.
圓的一般式 內容說明: 由圓的標準式展出圓的一般式.
快乐假期 2010年第6期 总第54期 贝尔芬 主编 暑期作文专刊 《快乐假期》杂志社 出版.
遞迴關係-爬樓梯.
老师:如何撰写教研文章? 主讲:石修银 谨以此赠与孜孜追求的老师 谨以此赠与改变人生的老师.
依“标”据“本”,命制考题 发表于《数学教学》2006年第9期 (华东师大核心“CN”刊物)
第十一章 真理与价值 主讲人:阎华荣.
12星座 对于星座,你又知道多少呢? 第一刊.
数学通报简介 ——如何写稿及投稿 数学通报 郑亚利 2014年8月.
减数分裂 制作:浙江金华一中 徐新福.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
推进《玻璃钢制品工》 国家职业资格证书制度的建设
本期导读: 1版 习 惯 2版 的 十个做人的好习惯 3版 力 4版 量 5版 6版 7版 8版
5.1 自然對數函數:微分 5.2 自然對數函數:積分 5.3 反函數 5.4 指數函數:微分與積分 5.5 一般底數的指數函數和應用 5.6 反三角函數:微分 5.7 反三角函數:積分 5.8 雙曲函數.
行政院國軍退除役官兵輔導委員會 嘉義榮民醫院.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 5 迴圈.
基本程式範例.
Course 4 搜尋 Search.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
第 1 章 演算法分析.
在NS-2上模擬多個FTP連線,觀察頻寬的變化
(Circular Linked Lists)
Introduction.
資料結構 第1章 導論.
Chap3 Linked List 鏈結串列.
Ch 3 Dynamic Programming (動態規劃).
遞迴 Recursive 授課老師:蕭志明.
北一女中 資訊選手培訓營.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
Week 2: 程式設計概念與 演算法的效能評估
Chap 1 概論Overview.
Definition of Trace Function
Chapter 2 遞迴 (Recursion).
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
大綱:加減法的化簡 乘除法的化簡 去括號法則 蘇奕君 台灣數位學習科技股份有限公司
挑戰C++程式語言 ──第8章 進一步談字元與字串
蕭志明 老師 Algorithm(演算法) Ext:6779
蕭志明 老師 Algorithm(演算法) /FB:
演算法時間複雜度 (The Complexity of Algorithms)
第 5 章 遞迴.
程式設計-- Binary Search 通訊一甲 B 楊穎穆.
演算法的效率分析.
演算法分析 (Analyzing Algorithms)
MiRanda Java Interface v1.0的使用方法
反矩陣與行列式 東海大學物理系‧數值分析.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
12797: Letters ★★★☆☆ 題組:Problem Set Archive with Online Judge
第一章 貨幣的時間價值.
例題 1. 多項式的排列 1-2 多項式及其加減法 將多項式 按下列方式排列: (1) 降冪排列:______________________ (2) 升冪排列:______________________ 排列 降冪:次數由高至低 升冪;次數由低至高.
Chapter 6 遞迴.
第一章 直角坐標系 1-3 函數及其圖形.
補充 數值方法 數值方法.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
Chapter 4 Multi-Threads (多執行緒).
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
Presentation transcript:

Chapter 1 演算法分析 1.1 演算法 1.2 Big-O

演算法分析 演算法是解決一問題的有限步驟,而評斷演算法的優劣可利用Big-O分析之,如O(n)比O(n2)來得佳。

1.1 演算法 演算法(Algorithms)是一解決問題(problems)的有限步驟程序。 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+2<4n 10n2+5n+1=O(n2), ∵我們可以找到c=11,n0=6,使得10n2+5n+1<11n2 7*2n +n2+n=O(2n), ∵我們可以找到c=8,n0=4,使得7*2n+n2+n<8*2n 10n2+5n+1=O(n3), 原來10n2+5n+1 O(n2),而n3又大於n2,理所當然10n2+5n+1=O(n3)是沒問題的。

f(n)=amnm +...+a1n+a0 時,f(n)=O(nm) 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,表示此程式執行的時間最壞的情況下不會超過n2,因為 n2+10n≦2n2,當c=2,n≧10時

1.2 Big-O 一般常見的Big-O有下列幾種情形: O(1) 稱為常數時間(constant) O(log n) 稱為次線性時間(sub-linear) O(n) 稱為線性時間(linear) O(n log n) 稱為n logn n O(n2) 稱為平方時間(quadratic) (n3) 稱為立方時間(cubic) O(2n) 稱為指數時間(exponential) O(n!) 稱為階層時間

1.2 Big-O O(1)<O(log n) <O(n)<O(n log n) <O(n2)<O(n3) <O(2n)<O(3n) <O(n!), 可由圖1-1或圖1-2得知。

1.2 Big-O