對數(shù)型O(log n)常用代碼執(zhí)行次數(shù)為x,n為目標(biāo)數(shù)字 。符合2^x=n,推導(dǎo)出x=log2(n)(log n)的情況算法消耗隨n的增長而增長,性能較好let n = 100;let i = 1;while(i<n){i = i * 2}代碼分析: i為128 。n為100,時間復(fù)雜度為O(log2(100)) 。因?yàn)镸ath.log2(100)≈6.64,所以最終的時間復(fù)雜度為O(6.65) 。
線性型O(n)常見于一次for循環(huán),while循環(huán)算法消耗隨n的增長而增長,性能一般無論n值有多大,即使是Inifinity,時間復(fù)雜度都為O(n)let n = 100;let j = 0;for(let i = 0;i<n;i++){j = i;}代碼分析: i為100,j為99 。n為100,時間復(fù)雜度為O(100) 。
線性對數(shù)型O(n log n)常用于一個對時間復(fù)雜度為O(log2(n))的代碼執(zhí)行一個n次循環(huán)算法消耗隨n的增長而增長,性能較差let n = 100;for(let m = 0; m<n; m++){let i = 1;while(i<n){i = i * 2}}代碼分析: i為128 。m為100,n為100,時間復(fù)雜度為O(m log2(n)) 。因?yàn)?00* Math.log2(100)≈664.39,所以最終的時間復(fù)雜度為O(664.39) 。
平方型O(n^2)、立方型O(n^3)、K次方型O(n^k)最常見的算法時間復(fù)雜度,可用于快速開發(fā)業(yè)務(wù)邏輯常見于2次for循環(huán),或者3次for循環(huán),以及k次for循環(huán)算法消耗隨n的增長而增長,性能糟糕實(shí)際開發(fā)過程中,不建議使用K值過大的循環(huán),否則代碼將非常難以維護(hù)let n = 100let v = 0;for(let i =0;i<n;i++){for(let j = 0; j<n; j++){v = v+j+i;}}代碼分析: v為990000,i為100,j為100. n為100,時間復(fù)雜度為O(100^2) 。也就是O(10000) 。
立方型O(n^3)、K次方型O(n^k)和平方型O(n^2)類似,無非是多了幾次循環(huán) 。
// 立方型O(n^3)for(let i =0;i<n;i++){for(let j = 0; j<n; j++){for(let m = 0; m<n; m++){}}}// K次方型O(n^k)for(let i =0;i<n;i++){for(let j = 0; j<n; j++){for(let m = 0; m<n; m++){for(let p = 0; p<n; p++){... // for循環(huán)繼續(xù)嵌套下去,k值不斷增大}}}}平方底指數(shù)型O(2^n)、立方底指數(shù)型O(3^n)、K次底指數(shù)型O(k^n)常見于2次遞歸的情況,3次遞歸以及k次遞歸的情況算法消耗隨n的增長而增長,性能糟糕實(shí)際開發(fā)過程中,k為1時,一次遞歸的時間復(fù)雜度為O(1) 。因?yàn)镺(1^n)無論n為多少都為O(1) 。斐波那契數(shù)列(兔子數(shù)列、黃金分割數(shù)列):1、1、2、3、5、8、13、21、34··· 題目:leetcode 509 斐波那契數(shù)
題解:509.斐波那契數(shù)
/** * @param {number} N * @return {number} */var fib = function (N) {/*** 解法1: 遞歸* 性能:88ms 34.2MB* 時間復(fù)雜度:O(2^N)*/if (N <= 1) return N;return fib(N - 1) + fib(N - 2);};假設(shè)N等于100 。代碼分析: 結(jié)果為 xxx 。因?yàn)闉g覽器直接卡死 。nodejs中也運(yùn)行不出來 。具體原因則是2的100次方真的太大了 。算不來 。N為100,時間復(fù)雜度為O(2^100) 。因?yàn)镸ath.pow(2, 100)= 1.2676506002282294e+30,所以最終的時間復(fù)雜度為O(1.2676506002282294e+30) 。大到爆表 。
立方底指數(shù)型O(3^n)、K次底指數(shù)型O(k^n)與平方底指數(shù)型O(2^n)類似,只不過基數(shù)變?yōu)榱?和k 。
O(Math.pow(3, n))O(Math.pow(k, n))假設(shè)n為100,假設(shè)k為5 。Math.pow(3, n)為5.153775207320113e+47 。Math.pow(5, n)為7.888609052210118e+69 。時間復(fù)雜度也是巨高,真的是指數(shù)爆炸。
更多的斐波那契數(shù)列時間復(fù)雜度O(2^N)的分析可以查看下文中的:如何理解斐波那契數(shù)列的時間復(fù)雜度O(2^N)?
階乘型O(n!)極其不常見算法消耗隨n的增長而增長,性能糟糕function nFacRuntimeFunc(n) {for(let i=0; i<n; i++) {nFacRuntimeFunc(n-1);}}階乘型O(n!)的時間復(fù)雜度按照(n!+(n-1)!+(n-2)!+ ··· + 1) +((n-1)!+(n-2)!+ ··· + 1)+ ··· 的方式去計(jì)算 。注意哦,這里是多個階乘的和 。不僅僅是n * (n-1) * (n-2) * (n-3)···1 。假設(shè)n從0到10,它的算法復(fù)雜度O(n!)依次為1,4,15,64,325,1956,13699,109600,986409,9864100··· 為了和上文中的其它算法復(fù)雜度做比較,n為100時是多少呢? O(2^n)為10才是1024,n為100時O(2^n)直接瀏覽器卡死了 。O(n!)才為10就接近1000萬了,真要是n設(shè)置成100,計(jì)算到機(jī)器燒了也計(jì)算不出吧 。所以n為100時的O(n!)就不要想了,龐大到恐怖的一個數(shù)字 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 獅子座本周運(yùn)勢綜合解析 獅子座今日運(yùn)勢
- 解析氣對人體的幾大作用
- 螞蟻莊園金鑾殿是故宮的哪個宮殿 1月7日答案解析
- 中醫(yī)解析氣功減肥原理
- 免備案服務(wù)器推薦 免費(fèi)備案域名解析
- 網(wǎng)站域名解析ip方法 網(wǎng)站dns查詢方式
- 解析太極拳實(shí)戰(zhàn)經(jīng)驗(yàn)
- ip域名解析查詢 代理域名備案服務(wù)
- 各類游泳動作的要點(diǎn)解析
- 國內(nèi)DNS測速網(wǎng)站推薦 dns測速在線解析
