時間複雜度: 理論定義

函數的漸近增長:給定兩個函數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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章