以下內容總結自極客時間王爭大佬的《數據結構與算法之美》課程,本文章僅供個人學習總結。
什么是數據結構?什么是算法?
從廣義上講,數據結構就是指一組數據的存儲結構。算法就是操作數據的一組方法。
類比圖書館的書籍,我們如果想找一本書可以有很多種方法能找到這本書,可以從頭一本一本找,也可以根據分類來縮小范圍找。毫無疑問后一種耗時更少。這就是生活中的算法。
算法和數據結構是聯系在一起的,特定的數據結構有特定的算法去操作,數據結構為算法提供服務,算法又依賴于特定的數據結構。比如廣度優先遍歷就可以作用在樹或者圖上,但是沒有對數組進行廣度優先遍歷的。
數據結構是靜態的,它只是組織數據的一種方式。如果不在它的基礎上操作、構建算法,孤立存在的數據結構就是沒用的。
學習的重點在什么地方?
- 復雜度分析(重要) 數據結構和算法的半壁江山,是數據結構和算法學習的精髓(數據結構和算法解決的是如何更省、更快地存儲和處理數據的問題,因此,我們就需要一個考量效率和資源消耗的方法,這就是復雜度分析方法。所以,如果你只掌握了數據結構和算法的特點、用法,但是沒有學會復 雜度分析,那就相當于只知道操作口訣,而沒掌握心法。只有把心法了然于胸,才能做到無招勝有招!)
- 10種數據結構(數組、鏈表、棧、隊列、散列表、二叉樹、堆、跳表、圖、Trie樹)和10種常用算法(遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動態規劃、字符串匹配算法)
一些可以讓你事半功倍的學習技巧
- 邊學邊練,適度刷題
“邊學邊練”這一招非常有用。建議你每周花1~2個小時的時間,集中把這周的三節內容涉及的數據結構和算法,全都自己寫出來,用代碼實現一遍。這樣一定會比單純地看或者聽的效果要好很多!
- 多問、多思考、多互動
學習最好的方法是,找到幾個人一起學習,一塊兒討論切磋,寫博客是一件可以交流和思考的很好的方式
- 打怪升級學習法
每節課后都寫一篇學習筆記或者學習心得,可以不用太長,但是一定要有思考。證明自己有進步
- 知識需要沉淀,不要想試圖一下子掌握所有
在學習的過程中,一定會碰到“攔路虎”。如果哪個知識點沒有怎么學懂,不要著急,這是正常的。因為,想聽一遍、看一遍就把所有知識掌握,這肯定是不可能的。學習知識的過程是反復迭代、不斷沉淀的過程。 如果碰到“攔路虎”,可以請教他人,或者可以先沉淀一下,過幾天再重新學一遍。所謂,書讀百遍其義自見,我覺得是很有道理的!
課后思考
思考學習數據結構與算法的方法。另外,你在之前學習數據結構和算法的過程中,遇到過什么樣的困難或者疑惑嗎?
主要是利用每天的通勤時間聽大佬的課程,對照著講義看,然后每次聽完一節課些一篇總計記錄下本節的內容和自己的思考,將自己的小節記錄放在github上,能夠促進自己堅持下去。
最近刷leecode就碰到了一個動態規劃的問題,斷斷續續想了一周沒有解決,代碼很簡單,但是自己對動態規劃的思維方式有些不理解,導致卡頓。所以訂了大佬的課程想系統的學習數據結構與算法。