學習算法的一些建議
若是想正兒八經的學習算法,首先給出 3 條建議:php
- 對基礎算法進行系統學習,所有手敲一遍(推薦書籍:算法四)
- 系統進行刷題,100 道題入門,200 道題拔高,300 道題拿 offer。
- 找到合適的學習夥伴,多和別人討論,造成本身的思惟。公衆號內可回覆:進羣,加入刷題羣
一、基礎數據結構和算法
-
鏈表git
-
哈希表程序員
-
字符串github
- 哈夫曼壓縮算法
- LZW 壓縮
- 匹配原理(多路徑匹配)
- 狀態機
- BF(暴風算法)
- KMP(看毛片算法)
- Sunday(這個很重要)
- 排序
- 查找
- 正則表達式
- 數據壓縮
-
樹面試
- 二叉樹
- 最優二叉樹(赫夫曼樹))
- 二叉查找樹(BST)
- 伸展樹(splay tree 分裂樹)
- 平衡二叉樹 AVL
- 紅黑樹
- B 樹,B+,B*
- R 樹
- Trie 樹(前綴樹)
- 後綴樹
- 二叉堆 (大根堆,小根堆)
- 二項樹
- 二項堆
-
圖的算法正則表達式
- 圖的存儲
- 基本操做(創建,遍歷,刪除節點,添加節點)
- 最小生成樹
- 拓撲排序
- 關鍵路徑
- 最短路徑: Floyd,Dijkstra,bellman-ford,spfa
-
排序算法
- 交換排序(包括 快速排序)
- 插入排序(包括 希爾排序)
- 選擇排序(包括 堆排序)
- 歸併排序
- 桶排序
-
查找編程
- 順序表查找:順序查找
- 有序表查找:二分查找
- 塊內有序:經過二分定位到塊,再進行查找。
- 動態查找: 二叉排序樹,AVL 樹,B- ,B+(在查找的過程當中動態生成表結構)
- 哈希表:O(1)
二、面試常考數據結構和算法
- DP (動態規劃) 大廠必問
- KMP 校招
- 快速排序 校招
- BFS/DFS (廣度/深度優先遍歷)重要
- 紅黑樹 (一種自平衡的二叉查找樹)校招
- Dijkstra:最短路徑算法 校招
- LRU 社招
三、算法設計思想
- 窮舉搜索法 (暴力破解法,對可能的解的衆多候選按照某種順序逐一枚舉和檢驗)
- 遞歸法 (斐波那契數列、快排都是典型的遞歸應用。關鍵點在於肯定遞歸公式和肯定邊界條件)
- 動態規劃 (將複雜的問題分解成一系列的子問題;DP 一般基於一個遞推公式及一個(或多個)初始狀態,當前子問題解由上一次子問題解推出)
- 貪心算法 (找到第一個合乎心意的解法,典型題目:硬幣找零問題)
- 回溯 (探針法,找不到問題答案就向回走。典型題目:八皇后問題)
- 分治算法(將一個難以直接解決的大問題,分割成一些規模較小的相同問題,各個擊破,分而治之。分治算法經常使用遞歸實現)
四、書目推薦
- 刷題
- Leetcode 前 200 道題 (初學者建議)
- 劍指 offer (牛客網能夠直接練習)
- 程序員代碼面試指南(中級讀者)
- 思惟提升
- 基礎
- 算法四 (排序,查找,圖,字符串四章值得精讀)
- 編程珠璣
- 算法設計
- 算法引論(從創造算法的角度思考問題)
- 算法導論(算法字典)
五、編程網站
以筆試爲目的的修煉都是耍流氓。但也許,咱們就想當個好流氓。秋招已到,但願你們都能收貨滿意的offer。數據結構
我把我寫的全部題解整理成了一本電子書放在了 github 上,三天內衝擊到 github 排行榜榜首!近 5w 人下載閱讀!要獲取的話,直接進入下方連接就能夠了(記得給我點個 star):數據結構和算法
https://github.com/geekxh/hello-algorithm