講師:郭育倫 d95037@csie.ntu.edu.tw 第2章 效能分析 講師:郭育倫 d95037@csie.ntu.edu.tw.

Slides:



Advertisements
Similar presentations
真题解析 2013 湖南公务员面试专项辅导 华图面试研究员 张鑫 cn.
Advertisements

台中市牙醫師公會 社會教育委員會 蔡佩音醫師 迎接新口腔時代. 蛀牙 v.s 全身疾病.
口試準備及口語表達技巧 民國 98 年 2 月 26 日 12:00pm 國立三重高中 陸芳瑜老師 1.
华图面试研究员 张鑫 湖南公务选调生面试专项辅导 真题解析 华图面试研究员 张鑫
中三選科— 文科.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
第三章及第四章資產負債表的重點整理 取材自1.課本 2.鄭丁旺中會第九版 3.營業員題庫重點.
基本概論 Basic concepts.
国家自然科学基金项目申请 经验交流与心得体会
高考主题讲座 高考语文 董 腾.
如何幫助兒童情緒管理- 一般兒童及情緒障礙兒童
管理学院励合社 学生干部培训 如何做好一名干部.
数据结构 杨鹏宇 QQ: 版权所有,转载或翻印必究
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Introduction 基本概念 授課老師:蕭志明
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
大家好!.
算法设计与分析 李清勇 教授 办公室:第九教学楼北201.
计算学科的基本问题 本章首先介绍一个对问题进行抽象的典型实例——哥尼斯堡七桥问题。然后,通过“梵天塔”问题和“停机问题”分别介绍学科中的可计算问题和不可计算问题。从“梵天塔”问题再引出算法复杂性中的难解性问题、P类问题和NP类问题,证比求易算法,P=NP是否成立的问题。
心理健康教育 高职校学生心里健康教育.
數學解題王 ~從閱讀策略談起 分享者:吳祥銘老師.
数据结构 第一章 绪论.
项 目 一 统计调查的设计与实施 ——统计数据的搜集.
武进区三河口中学欢迎您.
12年國教前哨站 談適性輔導及免試入學 12年國教前哨站 談適性輔導及免試入學 主講人:龍門國中王意蘭 校長 輔導主任 潘姿伶.
数据结构(C语言版) Data Structure
Performance Evaluation
(讲座幻灯课件请在网上下载,让我们一起思考!)
国家和我省禽业发展政策 和扶持项目解读 安徽省畜牧兽医局
Recurrences 給定T(n)=T(n/2) + O(n) 我們該如何得到 T(n) = O(nlogn)?
(讲座幻灯课件请在网上下载,让我们一起思考!)
从2008年度时尚先生看我们的时代精神方向.
學習行為觀察與評估 講 師:陳怡華.
罗湖区第二届智慧杯中学政治学科小课题研究
服務聯網地政雲.
主讲人: 吕敏 { } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 { } Spring 2012 ,USTC.
物件導向程式設計 (Object-Oriented rogramming)
計算方法設計與分析 Design and Analysis of Algorithms 唐傳義
Course 4 搜尋 Search.
第 1 章 演算法分析.
演算法方式總覽 The Divide-and-Conquer Strategy (個各擊破)(binary Searching、Quick Sort…. ) The Greedy Method(貪婪演算法) (Prim MST、Kruskal MST、Djikstra's algorithm) Dynamic.
计算复杂性和算法分析 计算机科学导论第六讲
主讲人: 吕敏 { } Spring 2016,USTC 算法基础 主讲人: 吕敏 { } Spring 2016,USTC.
主讲人: 吕敏 } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 } Spring 2012 ,USTC.
第七章常見的演算法 目的:解決問題 遞迴演算法 (一)從程式語言的角度來看:就是程序自 己呼叫自己的情況。
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
Data Structure.
算法的复杂度的渐近表示方法 Big O Notation and More 吕云哲.
计算机算法设计与分析(第3版) 王晓东 编著 电子工业出版社.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
Week 2: 程式設計概念與 演算法的效能評估
Lecture 6 Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。
第1章 绪论 2019/4/16.
计算机算法基础 周中成 苏州科技学院应用数学系 2019/4/18.
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
國立清華大學台灣研究 教師在職進修碩士學位班 陳韻如 繪圖者:趙祐瑜.
第三章 暴力法.
Course 10 削減與搜尋 Prune and Search
99高中資訊科選修課程 夥伴學習教師 專業進修研習 進階程式設計--演算法 教學示例與研討
演算法時間複雜度 (The Complexity of Algorithms)
資料結構與C++程式設計進階 遞迴(Recursion) 講師:林業峻 CSIE, NTU 6/ 17, 2010.
Course 8 回溯、分枝與限制 Backtracking, Branch-and-Bound
資料結構簡介 綠園.
演算法的效率分析.
演算法分析 (Analyzing Algorithms)
Divide and Conquer 3 Michael Tsai 2011/3/11.
Open topic2: 大O( Θ ,Ω)和小o( θ ,ω)有什么区别? 3/19/18 黄秉焜
Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。.
Data Structure.
社会的角度: 自然的角度 艺术的角度 出卖肉体的妓女 ——是“美”还是“丑”? 风烛残年、浑身皱纹等 ——是“美”还是“丑”? 《欧米哀尔》,青铜, 罗丹 1885年,又名《老娼妓》 社会的角度: 出卖肉体的妓女 ——是“美”还是“丑”? 自然的角度 风烛残年、浑身皱纹等.
Presentation transcript:

講師:郭育倫 d95037@csie.ntu.edu.tw 第2章 效能分析 講師:郭育倫 d95037@csie.ntu.edu.tw

本章學習重點 基本概念 時間複雜度 空間複雜度 遞迴公式

解決問題的步驟(1/2) 演算法的設計策略 哪些方法是可行的? 那個方法比較適合? 暴力法(brute force) 分割處理法(divide and conquer, 各個擊破法) 貪婪演算法(greedy method, greedy approach) 動態程序規劃(dynamic programming) 回溯法(backtracking) 分支設限法(branch and bound) 資料結構 哪些方法是可行的? 那個方法比較適合?

解決問題的步驟(2/2) 效能評估 效能量測 效能分析 直接利用實驗的方式,計算所花費的資源。 結果會比較精確,但是需要花較多的時間 。 演算法導論,探矽工作室 解決問題的步驟(2/2) 效能評估 效能量測 直接利用實驗的方式,計算所花費的資源。 結果會比較精確,但是需要花較多的時間 。 效能分析 找出該演算法所進行的各種運算,分析其所花費的資源。 方便做快速的判斷。

演算法導論,探矽工作室 基本概念 隨機存取機器的計算模型 最差與平均情況的分析 效率的差異

計算模型 Why? What? How? 方便我們發展演算法的運算模式和其使用資源的分析 單一處理器 演算法導論,探矽工作室 計算模型 Why? 方便我們發展演算法的運算模式和其使用資源的分析 What? 單一處理器 隨機存取機器(Random Access Machine, RAM) How? 其指令會一個接著一個順序執行,而不會同時執行。 包含真實電腦中常出現的指令: 運算(加減乘除、餘數、最大值、最小值等) 資料移動(載入、儲存) 控制(條件與非條件分支、副程式的呼叫與返回) 這些指令都會花費一定的時間。

程式運算 v.s. 數學式 內部迴圈 分析需要估計內部迴圈的重複次數,我們可以將程式轉換成數學運算來看 高次方的項位會「主宰」運算的次數 演算法導論,探矽工作室 程式運算 v.s. 數學式 內部迴圈 通常只有少數指令會在迴圈中不斷地被呼叫。 分析需要估計內部迴圈的重複次數,我們可以將程式轉換成數學運算來看 高次方的項位會「主宰」運算的次數 例如3n2+11n-45 常數項雖然也會影響運算次數, 但是當n值越大時,運算變化會很明顯地變得更大,而此時就會讓後面的常數項在概略估計時變得微不足道。 執行時間的成長度(order of growth)\ 成長速率(rate of growth)

演算法導論,探矽工作室 最差與平均情況的分析 我們注重的情況 最差情況 平均情況 一般來說,輸入的資料應該介於最佳和最糟兩者之間,即平均情況

注重最差情況的理由 一個演算法的最差情況執行時間是任何輸入的執行時間上限 有一些演算法的最差情況常常發生 平均情況與最差情況一樣糟糕 演算法導論,探矽工作室 注重最差情況的理由 一個演算法的最差情況執行時間是任何輸入的執行時間上限 知道上限可以讓我們保證此演算法不會花費更長的時間,並且不希望會有更糟的情況發生 有一些演算法的最差情況常常發生 例如在搜尋資料庫特定資料的時候,最差的情況發生在該資料不存在於資料庫中。然而尋找不存在資訊的情況卻常常發生 平均情況與最差情況一樣糟糕 某些時候我們會發現計算平均情況所得的時間與最差情況是相同的。

效率的差異 解決相同問題的不同演算法,通常在效率上會有差異,而且比硬體與軟體的差異還來得大。 範例:排序演算法 演算法導論,探矽工作室 效率的差異 解決相同問題的不同演算法,通常在效率上會有差異,而且比硬體與軟體的差異還來得大。 範例:排序演算法 「插入排序」需時c1n2 ,用快的A電腦執行 「合併排序」需時c2nlog2n,用慢的B電腦執行 A電腦每秒執行10億個指令,B電腦每秒執行1000萬個指令,則可知A電腦比B電腦快1000倍 假設要排序一個100萬個數字的陣列,c1=2,c2=50 在A電腦花費 2 × (106)2 / 109 = 2000 秒 在B電腦花費 50 × (106)log2(106) / 107 = 100 秒

時間複雜度 我們往往以一種「概量」的精神作為衡量程式執行時間的準則,稱為「時間複雜度」(time complexity) 演算法導論,探矽工作室 時間複雜度 我們往往以一種「概量」的精神作為衡量程式執行時間的準則,稱為「時間複雜度」(time complexity) 定義T(n),表示在一個完全理想狀態的計算機中其程式所執行的實際指令次數。對於輸入量n而言,它的最大執行時間就是時間複雜度 時間複雜度實際上只表示實際次數的一個量度層級,並不是真正的執行次數 漸進表示法(asymptotic notation) Θ符號表示 Ο符號表示 Ω符號表示

演算法之時間複雜度 (Time Complexity) 時間複雜度影響因素: 程式處理之輸入量 Algorithm之寫法 Compiler之功效 (理論上無法得知) 執行機器之速度 (理論上無法得知)

演算法 計次範例一

演算法 計次範例二

演算法 計次範例三 (費式序列)(非遞迴)

Θ符號表示(1/2) 由上限與下限來逼近一個函數 定義 範例 演算法導論,探矽工作室 Θ符號表示(1/2) 由上限與下限來逼近一個函數 定義 f(n) = Θ(g(n)),若且唯若存在大於0的常數c1、c2、n3,使得對所有n值而言,n ≥ n0時,c1g(n) ≤ f(n) ≤ c2g(n)均成立 g(n)可同時代表f(n)的上限與下限 範例 3n+2=Θ(n)

Θ符號表示(2/2) 直觀上在決定漸進界線時,函數的較低階項目可以被忽略 演算法導論,探矽工作室 Θ符號表示(2/2) 直觀上在決定漸進界線時,函數的較低階項目可以被忽略 對任何多項式 ,其中ai是常數,並且ad>0,我們會得到p(n)= Θ(nd) Θ(1) 任何常數都是0次多項式,例如p(n)=5,我們可以把任何常數函式表示為Θ(n0),或是Θ(1) 表示一個與某個變數相關的常數或是常數函數

Ο符號表示 表示函數的漸進上限 定義 也用來描述演算法的最差情況其執行時間的界線 範例 演算法導論,探矽工作室 Ο符號表示 表示函數的漸進上限 定義 對於f(n)=O(g(n))而言,存在正常數c與n0,對所有的n ≥ n0的值,0 ≤ f(n) ≤ cg(n)成立 g(n)的常數倍數,是f(n)的漸進上限,不過沒有明確表示出此上限是如何接近 也用來描述演算法的最差情況其執行時間的界線 範例 下圖的雙層巢狀迴圈裡,可以得到最差情況執行的時間為O(n2)

演算法導論,探矽工作室 雙層巢狀迴圈示意圖

常見的Ο函數與函數的實際值 函數 名稱 函數的實際值 Ο(1) 常數 - Ο(logn) 對數 1 2 3 4 5 Ο(n) 線性 8 16 演算法導論,探矽工作室 常見的Ο函數與函數的實際值 函數 名稱 函數的實際值 Ο(1) 常數 - Ο(logn) 對數 1 2 3 4 5 Ο(n) 線性 8 16 32 Ο(nlogn) nlogn 24 64 160 Ο(n2) 平方 256 1,024 Ο(n3) 3次方 512 4,096 32,768 Ο(2n) 指數 65,536 4,294,967,296 Ο(n!) 階乘

演算法導論,探矽工作室 常見的Ο函數成長關係圖

演算法導論,探矽工作室 定理2.1 如果 是一個d次多項式,則 證明 令C是f(n)中所有係數ai的絕對值當中最大的那個。則

定理2.1的延伸法則 範例 假設f(n)=n3+n,g(n)=n2+3n+1 則:f(n)=Ο(n3) g(n)=Ο(n2) 演算法導論,探矽工作室 定理2.1的延伸法則 範例 假設f(n)=n3+n,g(n)=n2+3n+1 則:f(n)=Ο(n3) g(n)=Ο(n2) Ο(f(n)+g(n))=Ο(n3) Ο(f(n)g(n))=Ο(n5)

Ω符號表示 估算函數f的下限值 定義 也用來表示最佳情況的執行時間界線 演算法導論,探矽工作室 Ω符號表示 估算函數f的下限值 定義 f(n) = Ω(g(n)),若且唯若存在大於0的常數c和n0,使得對所有n值而言,n ≥ n0時,f(n) ≥ cg(n)均成立 g(n)就可以看成是f(n)的下限 也用來表示最佳情況的執行時間界線

漸進函數的屬性 遞移性(transitivity) 反身性(reflexivity) 對稱性(symmetry) 演算法導論,探矽工作室 漸進函數的屬性 遞移性(transitivity) f(n)= Θ(n),且g(n)= Θ(h(n)),則f(n)= Θ(h(n)) f(n)= O(n),且g(n)= O(h(n)),則f(n)= O(h(n)) f(n)= Ω(n),且g(n)= Ω(h(n)),則f(n)= Ω(h(n)) 反身性(reflexivity) f(n)= Θ(f(n)) f(n)=O(f(n)) f(n)= Ω(f(n)) 對稱性(symmetry) 若且為若g(n)= Θ(f(n)),才存在f(n)= Θ(g(n)) 移位對稱(transpose symmetry) 若且為若g(n)= Ω(f(n)),才存在f(n)=O(g(n))

空間複雜度 執行完一個程式所需要的記憶體空間 也是用「概量」的精神來衡量,同樣使用Ο、Θ、Ω等符號來做為它的漸進表示 主要包含三個部份 演算法導論,探矽工作室 空間複雜度 執行完一個程式所需要的記憶體空間 如果所需的記憶體太大,可能會大大增加執行的時間,甚至不能執行 也是用「概量」的精神來衡量,同樣使用Ο、Θ、Ω等符號來做為它的漸進表示 主要包含三個部份 指令空間(instruction space) 資料空間(data space) 環境堆疊空間(environment stack space)

遞迴堆疊空間 使用遞迴函式(recursive function)時,編譯器一般的做法 遞迴函式所需的堆疊空間也稱為遞迴堆疊空間 演算法導論,探矽工作室 遞迴堆疊空間 使用遞迴函式(recursive function)時,編譯器一般的做法 每呼叫一次遞迴函式時,就將函式的返回位址(return address)、參數(function parameters)和區域變數(local variables)儲存一份在環境堆疊中 遞迴有幾層,其需儲存在環境堆疊中的返回位址、函式參數和區域變數就有多少份 遞迴函式所需的堆疊空間也稱為遞迴堆疊空間

計算階層(n!)的範例 遞迴方式 int factorial(int n){ if(n <= 1) return 1; 演算法導論,探矽工作室 計算階層(n!)的範例 遞迴方式 int factorial(int n){ if(n <= 1) return 1; return n*factorial(n-1); } 迴圈方式(疊代) int factorial(int n){ int i, num=1; if(n > 1){ for(i = 2; i <= n; i++){ num = num * i; } return num;

演算法導論,探矽工作室 遞迴函式展開之層次

遞迴公式 遞迴結構與遞迴公式 取代方法(substitution method) 支配方法(master method) 演算法導論,探矽工作室 遞迴公式 遞迴結構與遞迴公式 取代方法(substitution method) 支配方法(master method)

遞迴結構(1/2) 解決一個問題時,透過一次又一次重複呼叫自己來處理相關的子問題 演算法導論,探矽工作室 遞迴結構(1/2) 解決一個問題時,透過一次又一次重複呼叫自己來處理相關的子問題 遵循分割處理(divide and conquer,又稱各個擊破)的理念 將問題分割成數個子問題,子問題與原本問題相似但是較小 重複解決子問題 把這些解答合併來建立成原本問題的解答

遞迴結構(2/2) 每一層遞迴中包含的步驟 演算法使用遞迴結構時,他的執行時間通常可以使用一個遞迴公式來描述 演算法導論,探矽工作室 遞迴結構(2/2) 每一層遞迴中包含的步驟 將問題分割(divide)成數個子問題 重複處理(conquer)這些子問題,如果子問題夠小,就用直接計算的方式來解決子問題 將子問題的解答合併(combine)成為原來問題的解答 演算法使用遞迴結構時,他的執行時間通常可以使用一個遞迴公式來描述

遞迴公式 遞迴公式一個方程式或是不等式,可用來描述一個函式與其數值之間的關係 範例 如何分析遞迴公式? 演算法導論,探矽工作室 遞迴公式 遞迴公式一個方程式或是不等式,可用來描述一個函式與其數值之間的關係 範例 T(n)=aT(n/b)+f(n),a≧1、b>1,f(n)是指定函數,如O(1)、logn、n、n2等 如何分析遞迴公式? 取代方法 支配方法

取代方法 就是用重複替代遞迴函數的方式 範例 取代步驟 將遞迴公式一層層地展開、取代,來計算它實際的步驟次數 適用於較單純的遞迴公式 演算法導論,探矽工作室 取代方法 就是用重複替代遞迴函數的方式 將遞迴公式一層層地展開、取代,來計算它實際的步驟次數 適用於較單純的遞迴公式 範例 tRsum(n)=2+tRsum(n-1), n>0且tRsum(0)=2 取代步驟 tRsum(n)=2+tRsum(n-1) =2+2+tRsum(n-2) =4+tRsum(n-2) =..... =2n+ tRsum(0) =2(n+1), n>=0

演算法導論,探矽工作室 支配方法 假設分割處理演算法的整體複雜度是 T(n)而且第一步分割(divide)與第三步合併(combine)所需要的時間複雜度加起來是 f(n),那麼T(n)滿足下列的遞迴關係: T(n)=aT(n/b)+f(n) 其中T(1)=Θ(1)是很合理的假設,表示只有一筆輸入資料,而演算法需要一個常數時間來解它

演算法導論,探矽工作室 範例: 為方便起見,假設n=4k,k是一個整數,展開遞迴式: 相對應的遞迴樹(recursion tree)表示:

演算法導論,探矽工作室 第一次遞迴

演算法導論,探矽工作室 第二次遞迴

演算法導論,探矽工作室 最後一次遞迴

演算法導論,探矽工作室 推導結果

演算法導論,探矽工作室 考慮一般的狀況 同樣地,為了方便起見,我們假設 n=bk,其中k是一個整數 此遞迴關係式的展開與推導:

由遞迴公式T(n)=aT(n/b)+f(n)所產生的遞迴樹,以及其步驟計次界線關係 演算法導論,探矽工作室 由遞迴公式T(n)=aT(n/b)+f(n)所產生的遞迴樹,以及其步驟計次界線關係

演算法導論,探矽工作室 推導結果 支配理論(master theorem)

支配理論(1/2) 令a ≥ 1且b ≥ 1是兩個常數,f(n)是一個函數,並且假設T(n)滿足下列的遞迴關係 演算法導論,探矽工作室 支配理論(1/2) 令a ≥ 1且b ≥ 1是兩個常數,f(n)是一個函數,並且假設T(n)滿足下列的遞迴關係 T(n)=aT(n/b)+f(n) 1. 如果 ,其中ε是一個大於0的常數,則 2. 如果 ,則 3. 如果 ,其中ε是一個大於0的常數,如果當n夠大時, ,其中c是一個小於1的常數,則

支配理論(2/2) 證明 範例1. T(n) = aT(n/b) + cn 範例2. T(n) = aT(n/b) + cn2 請參閱課本 演算法導論,探矽工作室 支配理論(2/2) 證明 請參閱課本 範例1. T(n) = aT(n/b) + cn T(n) = O(n), if a < b T(n) = O(nlogn), if a = b T(n) = , if a > b 範例2. T(n) = aT(n/b) + cn2 T(n) = O(n2), if a < b2 T(n) = O(n2logn), if a = b2 T(n) = , if a > b2

結論 使用效能分析,可瞭解那個演算法的效能較佳,其理由為何,進而能設計出效能較佳的演算法 演算法導論,探矽工作室 結論 使用效能分析,可瞭解那個演算法的效能較佳,其理由為何,進而能設計出效能較佳的演算法 討論漸進表示法中各種重要的數學表示式,包含了O、Ω、Θ等 瞭解遞迴公式 較單純的遞迴公式可直接用取代方法計算出其複雜度 當遞迴公式的形式為T(n)=aT(n/b)+f(n)的狀況下,使用支配方法引導出的支配理論,讓我們可以計算出較複雜的遞迴公式其複雜度