天天看點

算法複雜度的計算方法

引用轉載自:

http://blog.chinaunix.net/uid-20490872-id-1665369.html

http://www.icourse163.org/course/hit-356006#/info

常見算法時間複雜度:

O(1): 表示算法的運作時間為常量

O(n): 表示該算法是線性算法

O(㏒2n): 二分查找算法

O(n2): 對數組進行排序的各種簡單算法,例如直接插入排序的算法。

O(n3): 做兩個n階矩陣的乘法運算

O(2n): 求具有n個元素集合的所有子集的算法

O(n!): 求具有N個元素的全排列的算法

優<---------------------------<劣

O(1)<O(㏒2n)<O(n)<O(n2)<O(2n)

時間複雜度按數量級遞增排列依次為:常數階O(1)、對數階O(log2n)、線性階O(n)、線性對數階O(nlog2n)、平方階O(n2)、立方階O(n3)、……k次方階O(nk)、指數階O(2n)、階乘O(n!)。

大O是上界,叫做低階函數,c和n0都是任意取的。

小o是嚴格低階函數,對于任意的c,n>=n0時,0<=f(n)<=cg(n)。

并非所有函數都是可比的,即既不是大O關系,也不是Ω關系。

求解遞歸方程的三個主要方法

•替換方法:

–首先猜想,

–然後用數學歸納法證明.

•疊代方法:

–循環地展開遞歸方程

–把方程轉化為一個和式

–然後用估計和的方法來求解.

•Master定理方法:

–求解型為T(n)=aT(n/b)+f(n)的遞歸方程

(1)若  

算法複雜度的計算方法

  那麼  

算法複雜度的計算方法

(2)若  

算法複雜度的計算方法

  那麼  

算法複雜度的計算方法

(3)若  

算法複雜度的計算方法

  且對于某個常數  

算法複雜度的計算方法

  和所有 充分大的  

算法複雜度的計算方法

  有  

算法複雜度的計算方法

  那麼  

算法複雜度的計算方法

也就是說把f(n)也化成n^k的形式,與 n^logba(以b為底a的對數)相比,若|k-logba| = ε,則可以使用master定理進行求解。

繼續閱讀