首先時(shí)間復(fù)雜度是什么,用來(lái)干什么的:
1.它是一個(gè)函數(shù)究抓。
2.它描述執(zhí)行算法所需要的計(jì)算工作量;
3.常用大寫O表示。
常用術(shù)語(yǔ)及其含義:
n:問(wèn)題規(guī)模
T(n):函數(shù)(n的函數(shù))啥刻,基本操作重復(fù)執(zhí)行的次數(shù)。
f(n):一個(gè)輔助函數(shù)咪笑。
同數(shù)量級(jí)函數(shù):當(dāng)n趨于無(wú)窮大時(shí)可帽,T(n)/f(n)的極限值為不等于零的常數(shù),則稱f(n)是T(n)的同數(shù)量級(jí)函數(shù)窗怒。記作:T(n) = O(f(n)),稱O(f(n))為算法的時(shí)間復(fù)雜度映跟。T(n)的同數(shù)量級(jí)即f(n)的值有(1,log2n扬虚,n努隙,n log2n ,n的平方辜昵,n的三次方荸镊,2的n次方,n!).
計(jì)算方法:
先找出算法的基本操作路鹰,然后根據(jù)相應(yīng)的各語(yǔ)句確定它的執(zhí)行次數(shù)贷洲,再找出 T(n) 的同數(shù)量級(jí),找出后晋柱,f(n) = 該數(shù)量級(jí)优构,若 T(n)/f(n) 求極限可得到一常數(shù)c,則時(shí)間復(fù)雜度T(n) = O(f(n))雁竞。
for(i=1; i<=n; ++i) { for(j=1; j<=n; ++j) { c[i][j] = 0;//該步驟屬于基本操作執(zhí)行次數(shù):n的平方次 for(k=1; k<=n; ++k) c[i][j] += a[i][k] * b[k][j];//該步驟屬于基本操作執(zhí)行次數(shù):n的三次方次 } }
則有 T(n) = n 的平方+n的三次方钦椭,根據(jù)上面括號(hào)里的同數(shù)量級(jí),我們可以確定 n的三次方 為T(n)的同數(shù)量級(jí)
則有 f(n) = n的三次方碑诉,然后根據(jù) T(n)/f(n) 求極限可得到常數(shù)c
則該算法的時(shí)間復(fù)雜度:T(n) = O(n^3) 注:n^3即是n的3次方彪腔。
分類:
按數(shù)量級(jí)遞增排列,常見的時(shí)間復(fù)雜度有:
常數(shù)階O(1),對(duì)數(shù)階O( ),線性階O(n),
線性對(duì)數(shù)階O(nlog2n),平方階O(n2)进栽,立方階O(n3),...德挣,
k次方階O(nk),指數(shù)階O(2n)。隨著問(wèn)題規(guī)模n的不斷增大快毛,上述時(shí)間復(fù)雜度不斷增大格嗅,算法的執(zhí)行效率越低番挺。