Growth of Functions 我們要如何知道一個演算法的優劣? 要如何分辨兩個演算法何者較佳?

Slides:



Advertisements
Similar presentations
大綱 1. 三角函數的導函數. 2. 反三角函數的導函數. 3. 對數函數的導函數. 4. 指數函數的導函數.
Advertisements

平面构成 第六章 平面构成形式与法则 — 破规与变异. 第七章 平面构成形式与法则 — 破规与变异 破规与变异构成的形式、有下列四类: 一、特异构成 特异构成。其表现特征是,在普遍相同性质的事物 当中,有个别异质性的事物,便会立即显现出来。
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
MATLAB 程式設計 時間量測 清大資工系 多媒體資訊檢索實驗室.
Introduction to C Programming
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
请说出牛顿第一定律的内容。.
遞迴關係-爬樓梯.
武进区三河口中学欢迎您.
今日4版 国内统一刊号:CN01-009第5期 (代号7-2)
Performance Evaluation
Chapter 1 Chang Chi-Chung
Recurrences 給定T(n)=T(n/2) + O(n) 我們該如何得到 T(n) = O(nlogn)?
認識倍數(一) 設計者:建功國小 盧建宏.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
5.1 自然對數函數:微分 5.2 自然對數函數:積分 5.3 反函數 5.4 指數函數:微分與積分 5.5 一般底數的指數函數和應用 5.6 反三角函數:微分 5.7 反三角函數:積分 5.8 雙曲函數.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
初中獨立專題探究(文字模式) 課程規劃與教學經驗分享
Linear Programming: Introduction and Duality
Chapter 5 迴圈.
Lecture 4 Recurrences 給定T(n)=T(n/2) + O(n) 我們該如何得到 T(n) = O(nlogn)?
计算复杂性和算法分析 计算机科学导论第六讲
主讲人: 吕敏 { } Spring 2016,USTC 算法基础 主讲人: 吕敏 { } Spring 2016,USTC.
主讲人: 吕敏 { } Spring 2012,USTC 算法基础 主讲人: 吕敏 { } Spring 2012,USTC.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
十字交乘法 多項式乘積: (X + 3)×(X+2) =X2 +2X +3X + 6 =X2+ 5X + 6 因式分解:
第 一 單 元 不定積分.
資料結構 第1章 導論.
Java 程式設計 講師:FrankLin.
1.3 在整除性問題之應用 附加例題 3 © 文達出版 (香港 )有限公司.
程式設計實習課(四) ----C 函數運用----
虎克定律與簡諧運動 教師:鄒春旺 日期:2007/10/8
分支宣告與程式設計 黃聰明 國立臺灣師範大學數學系
Ch2多項式函數 2-2 多項式的運算與應用 影音錄製:陳清海老師 資料提供:龍騰文化事業股份有限公司.
第一章 直角坐標系 1-3 函數圖形.
數學 近似值 有效數值.
Introduction to C Programming
Definition of Trace Function
Chapter 2 遞迴 (Recursion).
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
如何使用Gene Ontology 網址:
講師:郭育倫 第2章 效能分析 講師:郭育倫
 多項式的除法 x3 + 2x2 – 5x + 6 = (x – 1)(x2 + 3x – 2) + 4 被除式 除式 商式 餘式
美麗的西子湖.
C qsort.
資料結構簡介 綠園.
演算法的效率分析.
演算法分析 (Analyzing Algorithms)
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
函數應用(二)與自定函數.
10394: Twin Primes ★★★☆☆ 題組:Problem Set Archive with Online Judge
12797: Letters ★★★☆☆ 題組:Problem Set Archive with Online Judge
Open topic2: 大O( Θ ,Ω)和小o( θ ,ω)有什么区别? 3/19/18 黄秉焜
Commando War ★★☆☆☆ 題組:Problem Set Archive with Online Judge
10328: Coin Toss ★★★☆☆ 題組:Problem Set Archive with Online Judge
1757: Secret Chamber at Mount Rushmore
13194: DPA Number II ★★☆☆☆ 題組:Problem Set Archive with Online Judge
因數與倍數.
第一章 直角坐標系 1-3 函數及其圖形.
The role of Algorithms in Computing
4-1 變數與函數 第4章 一次函數及其圖形.
2.1 一元一次不等式 定 義 設a、b為兩個實數。.
All Sources Shortest Path The Floyd-Warshall Algorithm
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

Growth of Functions 我們要如何知道一個演算法的優劣? 要如何分辨兩個演算法何者較佳? 在這個章節中將介紹一些表示法,今後都將用本章所介紹的表示法來表示演算法的時間複雜度。

3.1 Asymptotic notation Θ-notation: f(n) = Θ(g(n)),g(n) is an asymptotically tight bound for f(n)。 Θ(g(n)) = {f(n)| 存在大於零的常數 c1,c2,以及 n0 使得 0  c1 g(n)  f(n)  c2 g(n) 對於所有的 n  n0 都成立} 假設有個演算法的執行時間為Θ(n2), 我們可以說:當 n 大到某個程度之後,所需要的執行時間會跟 n2 成正比。 Growth of Functions

為了證明上面的式子,我們必須找到 c1,,c2,和 n0 符合下面的不等式: 範例: 證明 3n2 - 6n = Θ(n2)。 證明: 為了證明上面的式子,我們必須找到 c1,,c2,和 n0 符合下面的不等式: c1n2  3n2 - 6n  c2n2, (對所有 nn0) 同除以 n2 得到 c1  3 - 6/n  c2 很明顯地,只要選擇 c1=2,c2=3 以及 n0=6 我們就可以證明 3n2 - 6n = Θ(n2)。 得證 Growth of Functions

註: f(n) = Θ(g(n)) 若且唯若 g(n)= Θ(f(n)),例如: n2=(3n2-6n) O-notation: f(n) = O(g(n)),g(n) is an asymptotically upper bound for f(n)。 O(g(n)) = {f(n)| 存在大於零的常數 c and n0 使得 0  f(n)  c2 g(n) 對於所有的 n  n0 都成立} O(n2)的意義是說:當 n 大到某個程度之後,所需要花的時間””最慘””只會跟 n2 成正比。 Growth of Functions

f(n) = Θ(g(n)) 意味著 f(n) = O(g(n)) 6n = O(n),6n = O(n2) Θ(g(n))  O(g(n)) f(n) = Θ(g(n)) 意味著 f(n) = O(g(n)) 6n = O(n),6n = O(n2) “執行時間為 O(n2)” 表示 “在最糟的情況下執行時間為 O(n2)” Growth of Functions

Ω(g(n)) = {f(n)| 存在大於零的常數 c 和 n0 使得 0  cg(n)  f(n) 對於所有 n  n0 都成立} Ω-notation: f(n) = Ω(g(n)),g(n) is an asymptotically lower bound for f(n)。 Ω(g(n)) = {f(n)| 存在大於零的常數 c 和 n0 使得 0  cg(n)  f(n) 對於所有 n  n0 都成立} 註: f(n) = Θ(g(n)) 若且唯若 (f(n)=O(g(n))) & (f(n)=Ω (g(n))) Ω(n2)的意義則是:當 n 大到某個程度之後,所需要花的時間””至少””會跟 n2 成正比。 Growth of Functions

tight bound upper bound lower bound Growth of Functions 用函式的圖形來表示剛剛介紹的三種表示法。 Θ是tight bound,O是upper bound, Ω是lower bound。 tight bound upper bound lower bound Growth of Functions

o-notation: f(n) = o(g(n)) (little-oh of g of n) o(g(n)) = {f(n)| 對於任何大於零的常數 c,都存在一個常數 n0 > 0 使得 0  f(n) < cg(n) 對於所有的 n  n0 都成立} 2n = o(n2),但是 2n2  o(n2) f(n) = o(g(n)) 也可以被定義成 Growth of Functions

ω-notation: f(n) = ω(g(n)) (little-omega of g of n) ω(g(n)) = {f(n)| 對於任何大於零的常數 c,都存在一個常數 n0 > 0 使得 0  cg(n) < f(n) 對於所有 n  n0 都成立} 2n2 = ω(n),但是 2n2  ω(n2) f(n) = ω(g(n)) 若且唯若 Growth of Functions

Comparison of functions 函數: ω Ω Θ O o 實數: >  =  < Transitivity,Reflexivity,Symmetry 任兩實數皆可互想比較大小(trichotomy),但是任兩函數並不一定能夠互相比較。 例如: f(n)=n and g(n)=n1+sin n f(n)=n g(n)=n1+sin(n) 在某些時候 f(n) 比較大,某些時候 g(n) 比較大 Growth of Functions

Appendix A: Summation formulas 一些分析常用到的數學公式 Growth of Functions

Growth of Functions

Exercises Problem 1: 為了解決一個問題而設計程式時,分析該演算法的執行時間複雜度是個很重要的依據。線性時間的演算法通常要比二次方時間的演算法受大家歡迎。 通常,問題的大小 n 可以決定演算法的執行時間,也許是要被排序的數字個數,或是多邊形的點的數目,等等。由於要算出一個演算法相對於 n 的執行時間公式不是很容易,如果能夠自動化那就太棒了。很不幸地,一般來說這是不太可能做到的,但是我們在這邊要考慮的程式是非常簡單的,所以把不可能變成了可能。我們的程式是根據下面的規則所建立的(BNF格式),其中 <number> 是大於等於零的整數。 Growth of Functions

Exercises <Program> ::= "BEGIN" <Statementlist> "END" <Statementlist> ::= <Statement> | <Statement> <Statementlist> <Statement> ::= < LOOP-Statement> | <OP-Statement> <LOOP-Statement> ::= <LOOP-Header> <Statementlist> "END" <LOOP-Header> ::= "LOOP" <number> | "LOOP n" <OP-Statement> ::= "OP" <number> 程式的執行時間可以計算如下:OP-statement 的執行時間就跟它的參數一樣。被 <LOOP-Statement> 包起來的區段則是會執行很多次,有可能會執行常數次(如果給定的 LOOP 參數是常數),或是執行 n 次(如果給定的 LOOP 參數是 n)。一段 statement 的執行時間只要把構成那段 statement 的全部時間加總起來就是答案。因此程式的執行時間一般來說會跟 n 有關係。 Growth of Functions

Exercises 輸入:第一行會有一個整數 k 表示有幾個程式需要處理。接下來會有 k 個符合之前規則的程式。空白字元以及換行可能會出現在程式中的任何地方,但不會出現在關鍵字或是數字之間,比如 BEGIN, END, LOOP, OP。LOOP 的深度最大只會到 10 。 輸出:對於每個程式,第一行先輸出程式的編號,如輸出實例所示。接著要輸出程式的執行時間,這會是一個跟 n 有關的多項式,最大的 degree 只會到 10。用平常表示多項式的方法印出來,格式如下: ”Runtime = a*n^10+b*n^9+ …+p*n^2+q*n+r”,省略係數是 0 的項次。係數是 1 的話該係數不用寫出來(除了常數項)。如果執行時間是 0,則印出”Runtime = 0”。在每組測資之後印一個空行。 Growth of Functions

以下是一個輸出入的實例: Sample Input Sample Output 2 BEGIN LOOP n OP 4 LOOP 3 END OP 2 OP 17 BEGIN OP 1997 LOOP n LOOP n OP 1 END END END Program #1 Runtime = 3*n^2+11*n+17 Program #2 Runtime = n^2+1997 Growth of Functions