在電腦科學中,演算法通常根據其功能和資料結構進行分類。以下是基本演算法類型依其核心功能的細分:
這些演算法有助於定位資料結構中的特定項目,例如陣列或列表。
線性搜尋:依序檢查每個元素,直到找到目標。
二分搜尋:透過重複將搜尋間隔一分為二來有效搜尋已排序的陣列。
跳轉搜尋:在已排序的陣列中向前跳躍,然後在段內執行線性搜尋。
插值搜尋:用於均勻分佈的排序數組;估計搜尋鍵的位置。
這些演算法以特定順序重新排序元素,通常是升序或降序。
冒泡排序:如果相鄰元素的順序錯誤,則重複交換它們。
選擇排序:找到最小的元素並將其移至清單的已排序部分。
插入排序:透過將每個元素插入到適當的位置來建立排序清單。
合併排序:使用分而治之的方法來分割、排序和合併清單。
快速排序:使用樞軸劃分列表並對子數組進行遞歸排序。
樹演算法用於在樹資料結構中導航、操作或搜尋。
二元樹遍歷:中序、前序和後序遍歷等技術,以特定順序存取節點。
二元搜尋樹(BST):二元樹,其中每個節點都有一個左(較小)和右(較大)子節點。
AVL樹:自平衡二元搜尋樹。
紅黑樹:遵循特定顏色規則進行平衡的平衡 BST。
線段樹:用於範圍查詢和更新。
這些演算法在圖上運行,圖由節點(頂點)和邊組成。
深度優先搜尋(DFS):在回溯之前沿著每個分支盡可能遠地探索。
廣度優先搜尋(BFS):在進入下一個層級之前探索所有鄰居。
Dijkstra 演算法:找出加權圖中節點之間的最短路徑。
貝爾曼-福特演算法:找出最短路徑,但即使具有負權重的圖形也能運作。
Floyd-Warshall 演算法:計算所有節點對之間的最短路徑。
動態規劃(DP)用於透過將複雜問題分解為重疊的子問題來解決它們。
斐波那契數列:使用由下而上的方法計算第 n 個斐波那契數。
背包問題:解決資源分配的最佳化問題。
最長公有子序列(LCS):找出兩個字串的最長公共序列。
矩陣鏈乘法:決定矩陣相乘的最佳方式。
貪心演算法在每一步中做出最佳的局部選擇,以找到整體最優。
Prim 演算法:找出圖的最小生成樹。
克魯斯卡爾演算法:也透過增加成本最低的邊來找到最小生成樹。
霍夫曼編碼:透過使用最常見符號的最短程式碼建立二元樹來壓縮資料。
活動選擇:選擇時間上不重疊的活動的最大數量。
這些演算法逐步嘗試解決方案,並在到達死胡同時回溯。
N 皇后問題:將 N 個皇后放置在 N×N 棋盤上且不發生衝突。
數獨求解器:使用回溯方法來填入謎題網格。
迷宮解算器:透過探索每種可能性來找到迷宮中的路徑。
分而治之演算法透過將問題分解為更小的子問題來解決問題。
合併排序:將清單分成兩半,對每一半進行排序,然後合併它們。
快速排序:圍繞樞軸劃分清單。
二分查找:分割搜尋間隔,以對數時間找到目標。
每個類別都提供了不同的方法來處理各種類型的計算問題,使您可以更輕鬆地為特定任務選擇正確的演算法。
以上是資料結構與演算法 |演算法 | DSA的詳細內容。更多資訊請關注PHP中文網其他相關文章!