計算機專業保研面試複習筆記——資料結構中的重要演算法
阿新 • • 發佈:2020-10-22
字串匹配 KMP演算法
判斷模式串是否是主串的子串
對模式串的字元特點,求得next陣列。next[i]代表如果第i位匹配失敗,應該向後移動幾位。時間複雜度O(m+n),即主串長度+模式串長度。是一種空間換時間的演算法。
最小生成樹 普里姆演算法
加點法
普里姆演算法是歸併頂點的演算法,與邊數無關,所以適用於稠密圖。
演算法從某一個頂點s開始,將s加入已連線頂點集合,每次迭代選擇已連線定點集合和未連線定點集合中代價最小的邊對應的點,加入到最小生成樹中。
最小生成樹 克魯斯卡爾演算法
加邊法
每次尋找不連通的兩個頂點間的代價最小的邊,直到所有頂點都連通。
最短路徑 迪傑斯特拉演算法
貪心思想
-
從目標頂點出發,將目標頂點設定為本輪的探索頂點
-
將探索頂點納入已探索集合S,成為已探索頂點
-
查詢所有當前探索頂點和未探索頂點的距離,並更新
-
將據所有已探索頂點最近的未探索頂點設定為下一輪的探索頂點,重複步驟2。
最短路徑 弗洛伊德演算法
動態規劃思想
- 我們假設arcs(i,j)為節點i到節點j的最短路徑的距離
- 對於每一個節點k,我們檢查arcs(i,k) + arcs(k,j) < arcs(i,j)是否成立,如果成立,證明從節點i到節點k再到節點j的路徑比節點i直接到節點j的路徑短,我們便設定arcs(i,j) = arcs(i,k) + arcs(k,j),
- 當我們遍歷完所有節點k,arcs(i,j)中記錄的便是節點i到節點j的最短路徑的距離。