引用轉載自:
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)若
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLhNWM5UGM5ImZzEjMxADOzQzN3ATM2YmZ5Q2Y3M2YzEGZkVmMmFGZh9CXmJjY1E2MhNzYhVDM5AjY1EmM0QGZyQjM0MmN2IWN1EWPudWaz9CX5cTMENTJz9CXltWahJ2Lc12bj5SdklWYi5ycvR3boBXao5yYvw1LcpDc0RHaiojIsJye.jpg)
那麼
(2)若
那麼
(3)若
且對于某個常數
和所有 充分大的
有
那麼
也就是說把f(n)也化成n^k的形式,與 n^logba(以b為底a的對數)相比,若|k-logba| = ε,則可以使用master定理進行求解。