前言
資料結構和演算法這門課一直是計算機專業最基礎的一門課,大學時期掌握的不夠好,畢業後長期寫業務,也沒有特別的花時間好好攻克一下,一直是自己的短板。這次在極客時間上訂閱了兩門資料結構和演算法方面的專欄,一是 Google 工程師王爭老師主講的《資料結構與演算法之美》專欄,另一篇是前 Facebook 工程師覃超老師主講的視訊專欄《演算法面試通關40講》,計劃將這兩個專欄配合著學習,相互補充,並適時輸出學習筆記。這是第一篇學習筆記,主要回答了資料結構和演算法是什麼?為什麼要學習?以及怎麼樣學習?這三個問題。
資料結構與演算法是什麼?
資料結構與演算法是每個計算機專業必修的一門課,這裡分為兩個部分,一個是資料結構
,一個是演算法
。
資料結構是一組資料的儲存結構
,演算法是運算元據的一組方法
。資料結構和演算法是相輔相成的,資料結構是為演算法服務的,演算法是作用在特定的資料結構之上。資料結構和演算法解決的是如何更省、更快地儲存和處理資料的問題。
為什麼要學習資料結構與演算法?
如果把一個優秀程式設計師需要掌握的技能和金庸武俠小說中的武功技能類比,那麼掌握多少門程式語言就如同掌 握了多少招式,如降龍十八掌,打狗棒法等,而資料結構與演算法就如同是武林高手的內功,像九陽神功、易筋經一樣。內功就如同基礎,只有內功紮實,學習任何招式就會事半功倍。
總結下有這幾個理由:
- 進入國內外大廠必備
- 修煉程式設計基礎思維,寫出效能更優的程式碼
- 提高學習力,掌握計算機程式的本質
怎麼樣學習資料結構與演算法?
#學什麼
這是王爭老師繪製的一張幾乎涵蓋了所有資料結構與演算法知識點的知識圖譜
:
學習重點:
- 學習複雜度分析,考量效率和資源消耗的標準。
- 最常用、最基礎的 20 個資料結構與演算法,學習他們的:
來歷
、特點
、適合解決什麼問題
和實際的應用場景
。- 資料結構:陣列、連結串列、棧、佇列、雜湊表、二叉樹、堆、跳錶、圖、Trie樹。
- 演算法:遞迴、排序、二分查詢、搜尋、雜湊演算法、分治演算法、回溯演算法、動態規劃、字串匹配演算法。
#怎麼學
- 邊學邊練習,三分學,七分練。將每次講到的資料結構和演算法使用自己熟悉的程式語言實現一遍,這裡將先使用最常用的 C 語言實現,後面想再分別使用 Objective-C、Swift、JavaScript 實現一遍。
- 多問多思考多互動,在專欄留言區多提問,參與討論,一起進步。
- 設定切實可行目標,每次學習完輸出學習筆記。
- 心態平和,沉澱知識,反覆迭代。
#有關書籍
- 入門:《大話資料結構》、《圖解演算法》
- 程式語言:《資料結構和演算法分析》
- 面試:《劍指offer》、《程式設計之美》、《程式設計珠璣》
- 閒暇閱讀:《演算法帝國》、《數學之美》、《演算法之美》
- 經典大部頭:《演算法導論》、《演算法》
- 殿堂級:《計算機程式設計藝術》
分享個人技術學習記錄和跑步馬拉松訓練比賽、讀書筆記等內容,感興趣的朋友可以關注我的公眾號「青爭哥哥」。