如何評價(jià)代碼的質(zhì)量蔗崎?
- 性能
- 可讀性
- 拓展性
如何分析代碼的時(shí)間復(fù)雜度和空間復(fù)雜度胸完?(The most important)
什么是數(shù)據(jù)結(jié)構(gòu)洽故、什么是算法竟贯?
- 數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)的存儲結(jié)構(gòu)
- 算法:操縱數(shù)據(jù)的方法
面對不同量級的數(shù)據(jù),需要選擇相應(yīng)的數(shù)據(jù)結(jié)構(gòu)甩栈。舉一個(gè)簡單的例子泻仙,當(dāng)我們只需要管理10本書的時(shí)候,我們根本不需要用什么方法量没,很快就能找到你要找的書玉转;當(dāng)我們要管理100本書的時(shí)候,我們的桌子可能就放不下了殴蹄,我們就需要一個(gè)書架(類似于數(shù)據(jù)結(jié)構(gòu))究抓,為了讓我們更加高效的找到某一本書,我們還需要按照一定的規(guī)則對這些書籍進(jìn)行排序(類似于算法)袭灯。當(dāng)我們需要管理100W本書的時(shí)候刺下,光書架已經(jīng)不夠了,我們需要一個(gè)巨大的倉庫稽荧,需要許許多多的書架橘茉。為了能夠高效的管理這些圖書,我們需要把一個(gè)倉庫分類成多個(gè)倉庫姨丈,每個(gè)倉庫又有許許多多的書架畅卓,書架又是按照一定的規(guī)則排序,這樣我們就能快速的找到相應(yīng)的圖書蟋恬。
數(shù)據(jù)結(jié)構(gòu)和算法的關(guān)系
數(shù)據(jù)結(jié)構(gòu)和算法是相輔相成的翁潘,不同的結(jié)構(gòu)有著不同的特點(diǎn),充分的發(fā)揮這些結(jié)構(gòu)的特點(diǎn)可以幫助我們高效的解決很多問題歼争。
舉一個(gè)現(xiàn)實(shí)中的例子:輪子都是設(shè)計(jì)成圓形拜马,因?yàn)闈L動摩擦力遠(yuǎn)遠(yuǎn)小于滑動摩擦力箱歧,由于圓形的這種特性,我們設(shè)計(jì)出輪子一膨,幫助人們來運(yùn)輸貨物呀邢,大大節(jié)省了重物在運(yùn)輸過程中消耗的體力,擴(kuò)寬了人們運(yùn)輸?shù)姆秶鳎矌椭瓿沙鋈祟愃降钠D巨任務(wù)价淌,如金字塔。
數(shù)據(jù)結(jié)構(gòu)和算法導(dǎo)圖
常見的數(shù)據(jù)結(jié)構(gòu)
- 數(shù)組
- 鏈表
- 棧
- 隊(duì)列
- 堆
- 哈希表
- 二叉樹
- 圖
- 跳表
- Trie樹
常用的算法
- 遞歸
- 排序
- 查找
- 最短路徑
- 動態(tài)規(guī)劃
常碰到的時(shí)間復(fù)雜度
其中指數(shù)階和階乘階都屬于十分低效的復(fù)雜度量級瞒津,應(yīng)該盡量避免蝉衣。
//這段代碼的時(shí)間負(fù)責(zé)度就是log(n)
i=1;
while (i <= n) {
i = i * 2;
}