縱觀時(shí)代的發(fā)展骤菠,從具體到抽象它改,從計(jì)算機(jī)到萬維網(wǎng)疤孕;時(shí)代的腳步一直在向前進(jìn)步,而我們要么引領(lǐng)時(shí)代要么緊隨時(shí)代央拖,再要么落后時(shí)代祭阀,想必沒有誰愿意落后,要做的大多數(shù)是緊隨時(shí)代腳步鲜戒,正如華為老總?cè)握撬f:沒有成功的企業(yè)专控,只有踩對(duì)時(shí)代節(jié)拍的公司。現(xiàn)如今信息發(fā)達(dá)遏餐,大數(shù)據(jù)時(shí)代來臨伦腐,身為IT從業(yè)人員,哪能不去學(xué)習(xí)了解失都;而且當(dāng)了解(掌握)了數(shù)據(jù)結(jié)構(gòu)與算法柏蘑,你看待問題的深度,解決問題的角度就會(huì)完全不一樣粹庞。因?yàn)檫@樣的你咳焚,就像是站在巨人的肩膀上,拿著生存利器行走世界庞溜。數(shù)據(jù)結(jié)構(gòu)與算法革半,會(huì)為你的編程之路,甚至人生之路打開一扇通往新世界的大門流码。
先看入門書籍:《大話數(shù)據(jù)結(jié)構(gòu)》《算法圖解》
數(shù)據(jù)結(jié)構(gòu)和算法是相輔相成的又官。數(shù)據(jù)結(jié)構(gòu)是為算法服務(wù)的,算法要作用在特定的數(shù)據(jù)結(jié)構(gòu)之上漫试。
想要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法赏胚,首先要掌握一個(gè)數(shù)據(jù)結(jié)構(gòu)與算法中最重要的概念——復(fù)雜度分析。
初級(jí)學(xué)習(xí)者商虐,只有逐一攻克20個(gè)最常用觉阅、最基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)與算法的知識(shí)點(diǎn)就足夠了。
10個(gè)數(shù)據(jù)結(jié)構(gòu):數(shù)組秘车、鏈表典勇、棧、隊(duì)列叮趴、散列表割笙、二叉樹、堆、跳表伤溉、圖般码、Trie樹;10個(gè)算法:遞歸乱顾、排序板祝、二分查找、搜索走净、哈希算法券时、貪心算法、回溯算法伏伯、動(dòng)態(tài)規(guī)劃橘洞、字符串匹配算法。
數(shù)據(jù)結(jié)構(gòu)和算法本身解決的是“快”和“省”的問題说搅。如何做到更快更省炸枣,就要對(duì)時(shí)間、空間復(fù)雜度分析必須了解弄唧。復(fù)雜度分析是整個(gè)算法學(xué)習(xí)的精髓适肠,只要掌握了它,數(shù)據(jù)結(jié)構(gòu)和算法的內(nèi)容基本上就掌握了一半套才。
大O復(fù)雜度表示法
算法的執(zhí)行效率迂猴,粗略地講,就是算法代碼執(zhí)行的時(shí)間背伴。
T(n)表示代碼執(zhí)行的時(shí)間沸毁;n表示數(shù)據(jù)規(guī)模的大小傻寂;f(n)表示每行代碼執(zhí)行的次數(shù)總和息尺。因?yàn)檫@是一個(gè)公式,所以用f(n)來表示疾掰。公式中的O搂誉,表示代碼的執(zhí)行時(shí)間T(n)與f(n)表達(dá)式成正比。
時(shí)間復(fù)雜度分析
1.只關(guān)注循環(huán)執(zhí)行次數(shù)最多的一段代碼
我們?cè)诜治鲆粋€(gè)算法静檬、一段代碼的時(shí)間復(fù)雜度的時(shí)候炭懊,也只關(guān)注循環(huán)執(zhí)行次數(shù)最多的那一段代碼就可以了。
2.加法法則:總復(fù)雜度等于量級(jí)最大的那段代碼的復(fù)雜度
3.乘法法則:嵌套代碼的復(fù)雜度等于嵌套內(nèi)外代碼復(fù)雜度的乘積
空間復(fù)雜度分析
時(shí)間復(fù)雜度的全稱是漸進(jìn)時(shí)間復(fù)雜度拂檩,表示算法的執(zhí)行時(shí)間與數(shù)據(jù)規(guī)模之間的增長(zhǎng)關(guān)系侮腹。類比一下,空間復(fù)雜度全稱就是漸進(jìn)空間復(fù)雜度(asymptotic space complexity)稻励,表示算法的存儲(chǔ)空間與數(shù)據(jù)規(guī)模之間的增長(zhǎng)關(guān)系父阻。
還有4個(gè)復(fù)雜度分析的知識(shí)點(diǎn):
最好情況時(shí)間復(fù)雜度(best case time complexity)、最壞情況時(shí)間復(fù)雜度(worst case time complexity)、平均情況時(shí)間復(fù)雜度(average case time complexity)加矛、均攤時(shí)間復(fù)雜度(amortized time complexity)履婉。