基本算法主要分爲如下四類:算法
1、子結構類算法:分治法,動態規劃,貪心法spa
子結構問題主要是要知道怎麼從子結構問題的解推出如今問題的解,最粗糙的是簡單遞歸,在遞歸的基礎上進行改進就造成了分治、動態規劃和貪心。排序
分治法着重於從中間開始考慮遞歸
動態規劃着重從頭尾考慮獲得子結構,着重考慮從子結構推出現有結構,須要記錄子結構值。動態規劃本質上只是減小了在遞歸過程當中對子結構問題的重複求解,可是並無縮小子結構問題的求解空間,因此有一些問題使用動態規劃一般時間複雜度並無減小到最小,這些問題一般須要更加巧妙的解法來實現最優的時間複雜度。索引
貪心法着重於從總體開始考慮,找出最優值後獲得子結構隊列
2、搜索類算法:回溯法,分支限界法, 深度優先搜索 ,廣度優先搜索基礎
搜索類算法最粗糙的是暴力枚舉。主要須要明確是否能有序窮舉解空間。擴展
回溯法創建在深度優先搜索的基礎上;搜索
分支限界法創建在廣度優先的基礎上(分支限界維護一個優先隊列,按照廣度優先擴展並計算優先值,而後放入優先隊列中並選出最優勢做爲下一個擴展點)。 Dijkstra算法最好歸結爲分支限界,每次從隊列中選擇最短路徑的最小值進行擴展。遍歷
3、排序類算法:
冒泡、插入、選擇
快排、歸併、堆、希爾
計數、基數、桶
四、查找類算法:
遍歷查找、二分查找
索引查找、哈希表