數據結構與算法總覽
文章目錄
記錄 極客算法訓練營
-
職業訓練:拆分知識點、刻意練習、反饋
-
五步刷題法(五毒神掌)
-
做算法題的最大誤區:只做一遍
如何有效學習數據結構與算法
預習、互動、練習、分享
1、職業訓練:拆分知識點、刻意練習、反饋
如果想要精通一個領域:分爲三步走
-
Chunk it up 切碎知識點
-
Deliberate Practicing 刻意練習
-
Feedback 反饋(分爲主動式反饋和被動式反饋)
一遍完全不夠的 練習多遍
(1)Chunk it up 切碎知識點
- 庖丁解牛
- 脈絡連接
tree 樹
連接 拆分 整合
每一個點突破 、 練好的基本功
分解數據結構和算法
數據結構
一維:
- 基礎:數組 array (string), 鏈表 linked list
- 高級:棧 stack, 隊列 queue, 雙端隊列 deque, 集合 set, 映射 map (hash or map), etc…
二維:
- 基礎:樹tree、圖graph
- 高級:二叉搜索樹 binary search tree (red-black tree, AVL), 堆 heap, 並查集 disjoint set, 字典樹 Trie, etc…
特殊
- 位運算 Bitwise, 布隆過濾器 BloomFilter
- LRU Cache 最近最少使用 (least recently used)
數據結構
注意:瞭解每個數據結構的原理和代碼框架
算法
- if-else,switch —> branch
- for, while loop —> Iteration
- 遞歸 Recursion (Divide & Conquer, Backtrace)
- 搜索 Search: 深度優先搜索 Depth first search, 廣度優先搜索 Breadth first search, A*, etc
- 動態規劃 Dynamic Programming
- 二分查找 Binary Search
- 貪心 Greedy
- 數學 Math , 幾何 Geometry
注意:在頭腦中回憶上面每種算法的思想和代碼模板
算法
算法腦圖
數據結構腦圖
動手繪製一份數據結構與算法腦圖
(2)Deliberate Practicing 刻意練習
職業化運動:
-
基本功是區分業餘和職業選手的根本
-
基礎動作的分解訓練和反覆練習
-
刻意練習-過遍數(五毒神掌)5遍起
-
練習缺陷、弱點的地方,可能會不舒服、不爽、枯燥,說明在成長。
-
生活中的例子:乒乓球、檯球、遊戲等等。
每天都是這麼枯燥的練習的 沒那麼苦逼的 練習練習就好了 還可以。
練習缺陷、弱點地方、不舒服、不爽、枯燥就行。
(3)Feedback反饋
Feedback
- 即時反饋
- 主動型反饋(自己去找)
- 高手代碼(Github、LeetCode、etc.)
- 第一視角直播 學習
- 被動式反饋(高手給你指點)
- code review
- 教練看你打,給你反饋
切題四件套
切題四件套:
-
Clarification (審題) 題意
-
Possible solution(解題多種可能性) :想所有可能的解法解這個題目
- compare(time/space) 比較時空 :從時間、空間複雜度比較幾種解題思路
- optimal(加強) 最優解
-
Coding(多寫)
-
Test cases(測試) (測試樣例)
反覆溝通,別題目沒看清楚就開始寫程序
想所有可能的想法去解,比較不同的時間空間搞最優。
寫單元測試再解題也可以,測試樣例、加強。
2、五步刷題法(五毒神掌)
刷題第一遍:
5分鐘:讀題+思考(建議不要超過15分鐘)
直接看解法:注意!多解法,比較優劣
背誦、默寫好的解法
第二遍:
馬上自己寫–> LeetCode提交 debug至完成
多種解法比較、體會–>優化!
看時間空間 效率 (執行時間和內存消耗)
第三遍:
過了一天後,再重複做題
不同解法的熟練程度–>專項練習
第四遍:
過了一週:反覆回來練習相同題目
對於不熟的題目專項練習。
第五遍:
如果有面試,面試前一週進行恢復式訓練
3、小結
小結
-
職業訓練:拆分知識點、刻意練習、反饋
-
五步刷題法(五毒神掌)
-
做算法題的最大誤區:只做一遍
刻意練習 專題練習 反饋
一遍又一遍進行思維鞏固、反覆練習 理解 幹
熟悉、熟練 肌肉記憶了。