110 likes | 324 Views
演算法分析. 輸入大小 n 基本運算 ( 如何挑選 ?) 時間複雜度分析:不同的輸入大小,演算法所執行的基本運算次數 T(n). 演算法分析. 所有情況時間複雜度分析 T(n) 最差情況時間複雜度分析 W(n) ,如果 T(n) 存在, T(n)=W(n) 平均情況時間複雜度分析 A(n) ,如果 T(n) 存在, T(n)=A(n) 最佳情況時間複雜度 B(n) ,如果 T(n) 存在, T(n)=B(n). 複雜度函數分類. 常數: c 線性: an+b 對數: alogn+b 線性對數: anlogn+b 平方: an 2 +bn+c
E N D
演算法分析 • 輸入大小n • 基本運算(如何挑選?) • 時間複雜度分析:不同的輸入大小,演算法所執行的基本運算次數T(n)
演算法分析 • 所有情況時間複雜度分析T(n) • 最差情況時間複雜度分析W(n),如果T(n)存在,T(n)=W(n) • 平均情況時間複雜度分析A(n) ,如果T(n)存在,T(n)=A(n) • 最佳情況時間複雜度B(n) ,如果T(n)存在,T(n)=B(n)
複雜度函數分類 • 常數:c • 線性:an+b • 對數:alogn+b • 線性對數:anlogn+b • 平方:an2+bn+c • 立方:an3+bn2+cn+d • 次方:a2n+b 可以用(n), (logn), (n2), (n3)等來表示 當n很大時,logn < n < nlogn < n2 < n3 < 2n
演算法分析 • 效率上的分析 • 空間複雜度 (Spacecompllexity) 演算法使用的記憶體空間的大小 • 時間複雜度」(Time complexity) 演算法執行完成所用的時間 真正被執行的程式行的數目 時間的估計方式,常用所謂的「 漸近式表示法 」 提供一個合理的比較標準
大O演算法分析(上限) 定義:對於給定的複雜度函數f(n),O(f(n))就是由一些複雜度函數g(n) 構成的集合,對於每個g(n),必存在某個正實數常數c與某個非負整數N, 使得對於所有n≧N g(n) ≦ c*f(n) g(n)為f(n)的big O 我們可以把f(n)看成是g(n)在最悲觀的情況下的執行時間,也就是說n的值相當大的時候,g(n) ≦cf(n)。有了漸近式的表示法之後,g(n)=n+2與g(n)=n+195有相同的f(n)=n,表示兩者無法做更進一步的比較 g(n)是我們算出來的,f(n)是我們要去找出來的 相當於擺了一個漸進上限
Big O • g(n)=4n+10,則g(n)可以用O(n)來表示,即f(n)=n 證明:g(n) ≦ c*f(n) 4n+10 ≦ cn (c-4)n ≧10 可以取c=5 n ≧ 10 N=10 所以只要c ≧ 5, n≧10時 4n+10 ≦ 5n
Big O hw • g(n)=2n2+3n+1,證明g(n)可以用O(n2)來表示,即f(n)=n2 有漸進上限big O 有沒有漸進下限?
Ω演算法分析(下限) 定義:對於給定的複雜度函數f(n),Ω(f(n))就是由一些複雜度函數g(n) 構成的集合,對於每個g(n),必存在某個正實數常數c與某個非負整數N, 使得對於所有n≧N g(n) ≧ c*f(n) g(n)為f(n)的Ω 指解決一個演算法的時間複雜度最少一定超過Ω(f(n)) 那O(f(n))呢? 解決一個算法的時間複雜度一定不會超過O(f(n)) 相當於擺了一個漸進下限
Ω演算法分析 • g(n)=4n+10,則g(n)可以用Ω(n)來表示,即f(n)=n 證明:g(n) ≧ c*f(n) 4n+10 ≧ cn (4-c)n ≧ -10 可以取c=1 n=1 所以只要c=1, n ≧ 1時 f(n)=Ω(n)
Ω hw • g(n)=2n2+5n+2,證明g(n)可以用Ω(n2)來表示,即f(n)=n2
Big O & Ω 定義:對於給定的複雜度函數f(n) (f(n))=O(f(n)) Ω(f(n)) 代表(f(n))是由一些複雜度函數g(n)構成的集合, 對於每個g(n),必存在某個正實數常數c與d及某個 非負整數N,使得對於所有n>=N c*f(n) ≦g(n) ≦ d*f(n)