《數(shù)據(jù)結(jié)構(gòu)與算法之美》復(fù)雜度分析(上):如何分析、統(tǒng)計(jì)算法的執(zhí)行效率和資源消耗 (讀后感)

什么是復(fù)雜度分析?

  1. 數(shù)據(jù)結(jié)構(gòu)和算法解決的是如何讓計(jì)算機(jī) 更快更省空間的執(zhí)行。
  2. 因此需要從兩個(gè)方面評估數(shù)據(jù)結(jié)構(gòu)和算法的優(yōu)越性。
  3. 分別用時(shí)間復(fù)雜度和空間復(fù)雜度兩個(gè)概念來描述性能問題,二者統(tǒng)稱為復(fù)雜度。
  4. 復(fù)雜度描述的是算法的執(zhí)行時(shí)間或者占用空間的大小與數(shù)據(jù)規(guī)模增長關(guān)系。

為什么需要復(fù)雜度分析?

  1. 和性能測試相比,復(fù)雜度分析有不依賴執(zhí)行環(huán)境、成本低、效率高、易操作、指導(dǎo)性強(qiáng)。
  2. 掌握復(fù)雜度分析,將能編寫出性能更優(yōu)的代碼,有利于降低系統(tǒng)開發(fā)和維護(hù)成本。

如何進(jìn)入復(fù)雜度分析?

大O表示法:就是在不用運(yùn)行代碼的情況下,用“肉眼” 得出一段代碼的執(zhí)行時(shí)間。

  1. 來源:算法的執(zhí)行時(shí)間與每行代碼的執(zhí)行次數(shù)成正比,用 T(n) = O(f(n)) 表示,其中 T(n) 表示算法執(zhí)行總時(shí)間,f(n) 表示代碼執(zhí)行總次數(shù),而 n 往往表示數(shù)據(jù)的規(guī)模。
  2. 特點(diǎn):以時(shí)間復(fù)雜度為例,由于時(shí)間復(fù)雜度描述的是算法執(zhí)行時(shí)間與數(shù)據(jù)規(guī)模的增長變化趨勢,所以“常量階”、低階、系數(shù)實(shí)際上對這種趨勢不產(chǎn)生決定性影響,所以在做時(shí)間復(fù)雜度分析時(shí)可以忽略這些項(xiàng);只需要記錄一個(gè)最大量級就可以了。
  3. 大O 時(shí)間復(fù)雜度并不是實(shí)際代碼真正的運(yùn)行時(shí)間,而是表示代碼執(zhí)行時(shí)間歲數(shù)據(jù)規(guī)模增長的變化趨勢;所以時(shí)間復(fù)雜度也叫 進(jìn)時(shí)間復(fù)雜度。

總結(jié):所有代碼的執(zhí)行時(shí)間 T(n) 與每行代碼的執(zhí)行次數(shù)n成正比; 總結(jié)公式: T(n) = O(f(n))

時(shí)間復(fù)雜度分析

  1. 只關(guān)注循環(huán)次數(shù)最多的一段代碼。
  2. 加法法則:總復(fù)雜度等于量級最大的那段代碼的復(fù)雜度; 總結(jié)公式: T1(n)=O(f(n)),T2(n)=O(g(n));那么 T(n)=T1(n)+T2(n)=max(O(f(n)), O(g(n))) =O(max(f(n), g(n)))
  3. 乘法法則: 嵌套代碼的復(fù)雜度等于嵌套內(nèi)外代碼復(fù)雜度的乘積; 總結(jié)公式: T(n)=T1(n)T2(n)=O(f(n))O(g(n))=O(f(n)*g(n))
  4. 多規(guī)模求加法: 比如方法有兩個(gè)參數(shù)控制兩個(gè)循環(huán)的次數(shù),那么這時(shí)就取二者復(fù)雜度相加。

復(fù)雜度量級(按數(shù)量級遞增)

  • 多項(xiàng)式階

    • 常量階 O(1)
    • 對數(shù)階 O(logn)
    • 線性階 O(n)
    • 線性對數(shù)階 O(nlogn)
    • 平方階 O(n2)、立方階 O(n3) ... k 次階 O(nk)
  • 非多項(xiàng)式

    • 指數(shù)階 O(2n)
    • 階乘階 O(n!)

復(fù)雜度量級

空間復(fù)雜度分析

空間和復(fù)雜度和時(shí)間復(fù)雜度分析方法基本類似,表示算法的存儲(chǔ)空間與數(shù)據(jù)規(guī)模之間的增長關(guān)系。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 她的世界戒備森嚴(yán) 一只蒼蠅難以插足 外面的世界不斷鼓噪 有病的人,快快放下吊橋 給你現(xiàn)實(shí)的湯藥 她努力望向現(xiàn)實(shí) 未...
    風(fēng)之子的黃昏閱讀 329評論 1 13
  • 想出去旅游
    頹廢的女孩閱讀 110評論 0 0
  • 杏花開的時(shí)候,是在夜里,伴著蛙聲開了,和著月色開了,又恰恰撞了清明,香了這四月天。這杏花開的倔強(qiáng),你來或是不來,...
    彥苣閱讀 733評論 0 0
  • 姐要去給外甥矯正牙,正好我也有牙不舒服,搭順風(fēng)車也去了。 歲月不饒人,衰老是從各個(gè)方面開始的,包括牙。這...
    多嬲閱讀 145評論 0 0
  • 我爸很喜歡種些花花草草,前些年,他往家里搬回來棵芒果樹苗,種在家門口。按我媽的話說,他把那樹苗當(dāng)孩子一樣養(yǎng)。 每天...
    哆啦有只大兔子閱讀 719評論 1 6

友情鏈接更多精彩內(nèi)容