算法训练营02-预备知识和时间复杂度分析
文章目錄
- 1. 準備知識
- 1. 拓展資料
- 2. 自頂向下編寫算法
- 2. 時間復雜度的分析
- 1.時間復雜度種類
- 2. 時間復雜度的分析方法
- 3. 主定理理論,時間復雜度計算
1. 準備知識
1. 拓展資料
2. 自頂向下編寫算法
自頂向下的方式,使用方法來抽象主干邏輯
2. 時間復雜度的分析
1.時間復雜度種類
時間復雜度,最常見是7種
2. 時間復雜度的分析方法
個人在學習中發現,時間復雜度的分析很多時候沒有唯一的方式,首先,關于時間復雜度的理解,我認為可以理解為隨著問題規模的增長,需要的時間增長的級別
但是具體的分析方式確實有很多種類
簡單的分析,比如對于sum(n)的算法,直接看n=1,和n=k之間的差別
使用遞推方式,比如斐波那契的最原始的方式f(n)=f(n-1)+f(n-2)的遞歸方式,所以T(n)=T(n-1)+T(n-2),所以T(n)=2^n*T(1),所以T(n)=2^n
使用樹狀圖類分析,把merge sort 分析,拆成一個樹,進行分析
我們只需要知道這棵樹的高度hhh,用高度hhh乘以每一層的時間消耗nnn,就可以得到總的時間復雜度O(n?h)O(n*h)O(n?h)
使用主定理(master method)分析
3. 主定理理論,時間復雜度計算
主定理最早出現在《算法導論》中,提供了分治方法帶來的遞歸表達式的漸近復雜度分析。
規模為n的問題通過分治,得到a個規模為n/b的問題,每次遞歸帶來的額外計算為f(n)
那么問題的時間復雜度為:
T(n) = aT(n/b)+f(n)
設c*=logb(a)
那么就可以得到問題的復雜度為:
舉例,二叉樹的遍歷,時間復雜度為O(n)
對應的
舉例,merge sort,時間復雜度為nlog(n)
a=2,b=2 c*=1 f(n)=O(n),則由f(n)=O(n^c* * (log(n))^k)可以推斷出來k=0 所以 T(n)=nlog(n)二分查找
a=1,b=2 c*=0 f(n)=O(1),所以c=0,k=0 c==c* T(n)=O(n^0 * log(n)^1 = O(log(n))舉例,暫無
注意,主定理的使用也是萬能的,他只使用于,子問題劃分為了獨立的子問題的情況,子問題之間不能再有交叉
在斐波那契數列中,主定理就是無法使用的
總結
以上是生活随笔為你收集整理的算法训练营02-预备知识和时间复杂度分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法训练营01-学习总览
- 下一篇: 算法训练营03-数组链表