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