函數的漸近增長:給定兩個函數f(n)和g(n),如果存在一個整數N,使得對於所有的n > N,f(n)總是比g(n)大,那麼,我們說f(n)的增長漸近快於g(n)。
算法時間複雜度定義
在進行算法分析時,語句總的執行次數T(n)是關於問題規模n的函數,進而分析T(n)隨n的變化情況並確定T(n)的數量級。算法的時間複雜度,也就是算法的時間量度,記作:T(n)=O(f(n))。它表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸近時間複雜度,簡稱爲時間複雜度。其中f(n)是問題規模n的某個函數。 這樣用大寫O( )來體現算法時間複雜度的記法,我們稱之爲大O記法。 一般情況下,隨着n的增大,T(n)增長最慢的算法爲最優算法。
推導大O階:
1.用常數1取代運行時間中的所有加法常數。
2.在修改後的運行次數函數中,只保留最高階項。
3.如果最高階項存在且不是1,則去除與這個項相乘的常數。得到的結果就是大O階。
常用的時間複雜度所耗費的時間從小到大依次是
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
以上引用自《大話數據結構》
漸近分析
考慮算法在輸入規模趨向無窮時的效率分析就是漸近分析。
漸近分析就是:忽略具體機器、編程或編譯器的影響,只觀察在輸入尺寸n取趨向無窮時算法效率的表現.
O、Ω、Θ表示
O 想象成 ⩽ 函數的漸近上界
Ω 想象成 ⩾ 函數的漸近下界
Θ 想象成 = 函數的準確界
以上引用自《算法之道》
Θ(g(n))={f(n):存在正常數c1,c2和n0,使對所有的n⩾n0,有0⩽c1g(n)⩽f(n)⩽c2g(n)}
O(g(n))={f(n): 存在正常數c和n0,使對所有n⩾n0,有0⩽f(n)⩽cg(n) }
Ω(g(n))={f(n): 存在正常數c和n0,使對所有n ⩾ n0,有0⩽cg(n)⩽f(n) }
o(g(n))={f(n): 對任意正常數c,存在常數n0>0,使對所有的n⩾n0,有0⩽f(n)⩽cg(n) }
ω(g(n))={f(n): 對任意正常數c,存在常數n0>0,使對所有的n⩾n0,有0⩽cg(n)