核心演算法版
『壹』 程序員必須掌握的核心演算法
程序員掌握核心演算法,還不收錄
1、十大排序演算法
(1)簡單排序:插入排序、選擇排序、冒泡排序(必學)。
(2)分治排序:快速排序、歸並排序(必學,快速排序還要關注中軸的選取方式)。
(3)分配排序:桶排序、基數排序。
(4)樹狀排序:堆排序(必學)。
(5)其他:計數排序(必學)、希爾排序。
對干十大演算法的學習,假如你不大懂的話,那麼推薦你去看書,因為看了書,你可能不僅僅知道這個演算法怎麼寫,還能知道他是怎麼來的。推薦書籍是《演算法第四版》,這本書講的很詳細,而且配了很多圖演示,還是挺好懂的。
2、搜索與回溯演算法
(1)貪心演算法(必學);
(2)啟發式搜索演算法:A*尋路演算法(了解);
(3)地圖著沖猜爛色演算法、N 皇後問題、最優加工順序;
(4)旅行商問題。
這方便的只是都是一些演算法相關的,像貪心演算法的思想兆納,就必須學的了。建議通過刷題來學習,leetcode 直接專題刷。
3、動態規劃
(1)樹形DP:01背包問題;
(2)線性DP:最長公共子序列、最長公共子串;
(3)區間DP:矩陣最大值(和以及積);
(4)數位DP:數字游戲;
(5)狀態壓縮DP:旅行商。
這里建議先了解動態規劃是什麼,之後 leetcode專題刷,反正就一般上面這幾種題型。
4、字元匹配演算法
(1)正則表達式;
(2)模式匹配:KMP、Boyer-Moore。
5、流相關演算法
(1)最大流:最短增廣路、Dinic 演算法。
(2)最大流最小割:最大收益問題、方格取數問題。
(3)最小費用最大流:最小散漏費用路、消遣。
『貳』 大數據核心演算法有哪些
1、A* 搜索演算法——圖形搜索演算法,從給定起點到給定終點計算出路徑。其中使用了一種啟發式的估算,為每個節點估算通過該節點的最佳路徑,並以之為各個地點排定次序。演算法以得到的次序訪問這些節點。因此,A*搜索演算法是最佳優先搜索的範例。
2、集束搜索(又名定向搜索,Beam Search)——最佳優先搜索演算法的優化。使用啟發式函數評估它檢查的每個節點的能力。不過,集束搜索只能在每個深度中發現最前面的m個最符合條件的節點,m是固定數字——集束的寬度。
3、二分查找(Binary Search)——在線性數組中找特定值的演算法,每個步驟去掉一半不符合要求的數據。
4、分支界定演算法(Branch and Bound)——在多種最優化問題中尋找特定最優化解決方案的演算法,特別是針對離散、組合的最優化。
5、Buchberger演算法——一種數學演算法,可將其視為針對單變數最大公約數求解的歐幾里得演算法和線性系統中高斯消元法的泛化。
6、數據壓縮——採取特定編碼方案,使用更少的位元組數(或是其他信息承載單元)對信息編碼的過程,又叫來源編碼。
7、Diffie-Hellman密鑰交換演算法——一種加密協議,允許雙方在事先不了解對方的情況下,在不安全的通信信道中,共同建立共享密鑰。該密鑰以後可與一個對稱密碼一起,加密後續通訊。
8、Dijkstra演算法——針對沒有負值權重邊的有向圖,計算其中的單一起點最短演算法。
9、離散微分演算法(Discrete differentiation)。