前言
數(shù)據(jù)結構和算法這門課一直是計算機專業(yè)最基礎的一門課捡硅,大學時期掌握的不夠好吏口,畢業(yè)后長期寫業(yè)務术瓮,也沒有特別的花時間好好攻克一下,一直是自己的短板踊东。這次在極客時間上訂閱了兩門數(shù)據(jù)結構和算法方面的專欄谈况,一是 Google 工程師王爭老師主講的《數(shù)據(jù)結構與算法之美》專欄,另一篇是前 Facebook 工程師覃超老師主講的視頻專欄《算法面試通關40講》递胧,計劃將這兩個專欄配合著學習碑韵,相互補充,并適時輸出學習筆記缎脾。這是第一篇學習筆記祝闻,主要回答了數(shù)據(jù)結構和算法是什么?為什么要學習?以及怎么樣學習联喘?這三個問題华蜒。
數(shù)據(jù)結構與算法是什么?
數(shù)據(jù)結構與算法是每個計算機專業(yè)必修的一門課豁遭,這里分為兩個部分叭喜,一個是數(shù)據(jù)結構
,一個是算法
蓖谢。
數(shù)據(jù)結構是一組數(shù)據(jù)的存儲結構
捂蕴,算法是操作數(shù)據(jù)的一組方法
。數(shù)據(jù)結構和算法是相輔相成的闪幽,數(shù)據(jù)結構是為算法服務的啥辨,算法是作用在特定的數(shù)據(jù)結構之上。數(shù)據(jù)結構和算法解決的是如何更省盯腌、更快地存儲和處理數(shù)據(jù)的問題溉知。
為什么要學習數(shù)據(jù)結構與算法?
如果把一個優(yōu)秀程序員需要掌握的技能和金庸武俠小說中的武功技能類比腕够,那么掌握多少門編程語言就如同掌
握了多少招式级乍,如降龍十八掌,打狗棒法等帚湘,而數(shù)據(jù)結構與算法就如同是武林高手的內(nèi)功玫荣,像九陽神功、易筋經(jīng)一樣客们。內(nèi)功就如同基礎,只有內(nèi)功扎實材诽,學習任何招式就會事半功倍底挫。
總結下有這幾個理由:
- 進入國內(nèi)外大廠必備
- 修煉編程基礎思維,寫出性能更優(yōu)的代碼
- 提高學習力脸侥,掌握計算機程序的本質(zhì)
怎么樣學習數(shù)據(jù)結構與算法建邓?
#學什么
這是王爭老師繪制的一張幾乎涵蓋了所有數(shù)據(jù)結構與算法知識點的知識圖譜
:
學習重點:
- 學習復雜度分析,考量效率和資源消耗的標準睁枕。
- 最常用官边、最基礎的 20 個數(shù)據(jù)結構與算法,學習他們的:
來歷
外遇、特點
注簿、適合解決什么問題
和實際的應用場景
。- 數(shù)據(jù)結構:數(shù)組跳仿、鏈表诡渴、棧、隊列菲语、散列表妄辩、二叉樹惑灵、堆、跳表眼耀、圖英支、Trie樹。
- 算法:遞歸哮伟、排序干花、二分查找、搜索澈吨、哈希算法把敢、分治算法、回溯算法谅辣、動態(tài)規(guī)劃修赞、字符串匹配算法。
#怎么學
- 邊學邊練習桑阶,三分學柏副,七分練。將每次講到的數(shù)據(jù)結構和算法使用自己熟悉的編程語言實現(xiàn)一遍蚣录,這里將先使用最常用的 C 語言實現(xiàn)割择,后面想再分別使用 Objective-C、Swift萎河、JavaScript 實現(xiàn)一遍荔泳。
- 多問多思考多互動,在專欄留言區(qū)多提問虐杯,參與討論玛歌,一起進步。
- 設定切實可行目標擎椰,每次學習完輸出學習筆記支子。
- 心態(tài)平和,沉淀知識达舒,反復迭代值朋。
#有關書籍
- 入門:《大話數(shù)據(jù)結構》、《圖解算法》
- 編程語言:《數(shù)據(jù)結構和算法分析》
- 面試:《劍指offer》巩搏、《編程之美》昨登、《編程珠璣》
- 閑暇閱讀:《算法帝國》、《數(shù)學之美》贯底、《算法之美》
- 經(jīng)典大部頭:《算法導論》篙骡、《算法》
- 殿堂級:《計算機程序設計藝術》
擴展閱讀
數(shù)據(jù)結構與算法學習-鏈表下
數(shù)據(jù)結構與算法學習-鏈表上
《算法圖解》讀書筆記—像小說一樣有趣的算法入門書
數(shù)據(jù)結構與算法學習-數(shù)組
數(shù)據(jù)結構與算法學習-復雜度分析
數(shù)據(jù)結構與算法學習-開篇
分享個人技術學習記錄和跑步馬拉松訓練比賽、讀書筆記等內(nèi)容,感興趣的朋友可以關注我的公眾號「青爭哥哥」糯俗。