算法指南

評價算法的兩個重要依據(jù)——時間復雜度和空間復雜度郁惜。

時間復雜度:算法的時間復雜度堡距,它反映的不是算法的邏輯代碼到底被執(zhí)行了多少次,而是隨著輸入規(guī)模的增大兆蕉,算法對應的執(zhí)行總次數(shù)的一個變化趨勢羽戒。

  • 我們來看一個??:
function traverse1(arr) {
    var len = arr.length //執(zhí)行了1次
    for(var i=0;i<len;i++) { 
        //var i=0; 執(zhí)行了1次   
        //i<len; 執(zhí)行了(n+1)次  
        //i++ 執(zhí)行了1次
        console.log(arr[i])  //執(zhí)行了n次
    }
}

function traverse2(arr) {
    var outLen = arr.length

    for(var i=0;i<outLen;i++) {
        var inLen = arr[i].length

        for(var j=0;j<inLen;j++) { 
            console.log(arr[i][j])
        }
    }
}
兩層循環(huán)代碼執(zhí)行的次數(shù)

做個求總執(zhí)行次數(shù) T(n)的加法看看:

//traverse1的代碼執(zhí)行次數(shù)
T(n) = 1 + n + 1 + (n+1) + n = 3n + 3
//traverse2的代碼執(zhí)行次數(shù)
T(n) = 1 + 1 + (n+1) + n + n + n + n*(n+1) + n*n + n*n = 3n^2 + 5n + 3

要想反映趨勢,那就簡單多了虎韵,直接抓主要矛盾就行半醉。我們可以嘗試對T(n) 做如下處理:

  • T(n)是常數(shù),那么無腦簡化為1
  • T(n)是多項式劝术,比如3n^2 + 5n + 3缩多,我們只保留次數(shù)最高那一項呆奕,并且將其常數(shù)系數(shù)無腦改為1
T(n) = 10   -->  O(n) = 1
T(n) = 3n^2 + 5n + 3  -->  O(n) = n^2

遍歷N維數(shù)組衬吆,需要 N 層循環(huán)梁钾,我們只需要關心其最內層那個循環(huán)體被執(zhí)行多少次就行了。

我們可以看出逊抡,規(guī)模為n的一維數(shù)組遍歷時姆泻,最內層的循環(huán)會執(zhí)行n次,其對應的時間復雜度是O(n)冒嫡;規(guī)模為 nn的二維數(shù)組遍歷時拇勃,最內層的循環(huán)會執(zhí)行 nn 次,其對應的時間復雜度是O(n^2)孝凌。

以此類推方咆,規(guī)模為nm的二維數(shù)組最內層循環(huán)會執(zhí)行nm次,其對應的時間復雜度就是O(nm)蟀架;規(guī)模為 nn*n 的三維數(shù)組最內層循環(huán)會執(zhí)行n^3次瓣赂,因此其對應的時間復雜度就表示為O(n^3)

空間復雜度:是對一個算法在運行過程中臨時占用存儲空間大小的量度片拍。和時間復雜度相似煌集,它是內存增長的趨勢

  • 常見的空間復雜度有 O(1)捌省、O(n)O(n^2)苫纤。
    理解空間復雜度,我們照樣來看一個??:
function traverse(arr) {
    var len = arr.length
    for(var i=0;i<len;i++) {
        console.log(arr[i])
    }
}
//在 traverse 中纲缓,占用空間的有以下變量:
//arr
//len
//i

后面盡管咱們做了很多次循環(huán)方面,但是這些都是時間上的開銷。循環(huán)體在執(zhí)行時色徘,并沒有開辟新的內存空間。因此操禀,整個 traverse函數(shù)對內存的占用量是恒定的褂策,它對應的空間復雜度就是O(1)

下面我們來看另一個??颓屑,此時我想要初始化一個規(guī)模為 n 的數(shù)組斤寂,并且要求這個數(shù)組的每個元素的值與其索引始終是相等關系,我可以這樣寫:

function init(n) {
    var arr = []
    for(var i=0;i<n;i++) {
        arr[i] = i
    }
    return arr
}
//在 init中揪惦,占用空間的有以下變量:
//n
//arr
//i

注意這里這個arr遍搞,它并不是一個一成不變的數(shù)組。arr最終的大小是由輸入的 n 的大小決定的器腋,它會隨著n的增大而增大溪猿、呈一個線性關系钩杰。因此這個算法的空間復雜度就是 O(n)

由此我們不難想象诊县,假如需要初始化的是一個規(guī)模為n*n的數(shù)組讲弄,那么它的空間復雜度就是O(n^2) 啦。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末依痊,一起剝皮案震驚了整個濱河市避除,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胸嘁,老刑警劉巖瓶摆,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異性宏,居然都是意外死亡群井,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門衔沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝌借,“玉大人,你說我怎么就攤上這事指蚁∑杏樱” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵凝化,是天一觀的道長稍坯。 經(jīng)常有香客問我,道長搓劫,這世上最難降的妖魔是什么瞧哟? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮枪向,結果婚禮上勤揩,老公的妹妹穿的比我還像新娘。我一直安慰自己秘蛔,他們只是感情好陨亡,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著深员,像睡著了一般负蠕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倦畅,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天遮糖,我揣著相機與錄音,去河邊找鬼叠赐。 笑死欲账,一個胖子當著我的面吹牛屡江,可吹牛的內容都是我干的。 我是一名探鬼主播敬惦,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盼理,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俄删?” 一聲冷哼從身側響起宏怔,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畴椰,沒想到半個月后臊诊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡斜脂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年抓艳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帚戳。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡玷或,死狀恐怖,靈堂內的尸體忽然破棺而出片任,到底是詐尸還是另有隱情偏友,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布对供,位于F島的核電站位他,受9級特大地震影響,放射性物質發(fā)生泄漏产场。R本人自食惡果不足惜鹅髓,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望京景。 院中可真熱鬧窿冯,春花似錦、人聲如沸确徙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米愿。三九已至,卻和暖如春鼻吮,著一層夾襖步出監(jiān)牢的瞬間育苟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工椎木, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留违柏,地道東北人博烂。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像漱竖,于是被迫代替她去往敵國和親禽篱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容

  • 今天感恩節(jié)哎馍惹,感謝一直在我身邊的親朋好友躺率。感恩相遇!感恩不離不棄万矾。 中午開了第一次的黨會悼吱,身份的轉變要...
    迷月閃星情閱讀 10,566評論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,218評論 1 3
  • 表情是什么良狈,我認為表情就是表現(xiàn)出來的情緒后添。表情可以傳達很多信息。高興了當然就笑了薪丁,難過就哭了遇西。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,060評論 2 7