演算法 期末整理 (done)
1. (DP)多階圖最小成本路徑 似乎不考(?)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Input:
Output:
2. (DP)矩陣鏈乘積
Input:
Output:
Example:
p = [30, 35, 15, 5, 10, 20, 25]
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
3. (DP)最小編輯成本 似乎不考(?)
- 定義:給定字串A,B,利用以下操作將A改成B的最低成本
- 操作1(Cost1): 在字串A刪除一個字元
- 操作2(Cost2): 在字串A插入一個字元
- 操作3(Cost3): 在字串A將一個字元換成另一個字元
- c[i, j] 中儲存將 A 的子字串 轉為 B 的子字串 的最小成本,
其中 且
4. (DP)最佳二元搜尋樹 (類似2.)
Input:
Output:
Example:
p = [0.15, 0.10, 0.05, 0.10, 0.20]
q = [0.05, 0.10, 0.05, 0.05, 0.05, 0.10]
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
5. (DP)子集合加總 (類似0/1背包)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
6. Tree Searching
6-1. 廣度優先搜尋(BFS)
BFS舉例
6-2. 深度優先搜尋(DFS)
DFS舉例1
DFS舉例2
6-3. 登山搜尋(Hill-climbing Search) = DFS + 評估函數
HCS舉例
6-4. 最佳優先搜尋(Best-Frist Search) = BFS + DFS + 評估函數
Best-Frist Search舉例
6-5. 實例
- 漢米爾頓迴路 [NPC問題]
- 旅行銷售員問題:求出「邊加權總合最小或長度最短」的漢米爾頓迴路 [NP-hard問題]
- 尤拉迴路問題
- 尤拉路徑 or 尤拉鏈:無向圖上經過每個邊恰好一次的路徑。 [P問題]
- 尤拉迴路:無向圖上經過每個邊恰好一次的迴路。 [P問題]
7. 回溯演算法 #我覺得根本就是DFS = =
- 八皇后問題
- 皇后棋子:可以從八個方向攻擊對方的棋子。
- 如何在一個8×8的西洋棋棋盤上放置8個不會互相攻擊的皇后棋子。
圖解,讓你看看什麼是回朔ㄏㄏ,根本就只是stack退回去啊= =
8. 分支定界演算法
- 重點:
- 找出好的機制在搜尋解答的過程中,擴展解答空間樹產生分支。
- 找出好的機制設定上界與下界,使許多分支終止搜尋。
- 旅行推銷員問題之分支(重點),其他請看PPT。
9. A*演算法 = 最佳優先搜尋 + 「特殊」評估函式
- 可被視為一個分支定界演算法的特例,當第一個可行解被走訪時,所有在堆積(優先佇列)中的節點都被終止。
- 評估函式:
- 從root至節點n的當前成本。
- 從節點n到目標節點的評估的未來成本。
- 從節點n到目標節點的==實際的未來成本==。
- 從root至節點n再到目標節點的==實際成本==。
- 證明:
- 令 為目標節點。可得
- 假設 不是最佳節點,則必存在一個已存在heap中的,但是未被選擇的節點 ,使得
- 因我們使用最佳優先搜尋法,故可得
- 由不等式(1)(2)(4)可得
,與(3)矛盾,故得證 為最佳節點。
- 解多階圖最短路徑問題(from PPT)
10. 最大流演算法
Ford-Fulkerson演算法 圖解
Edmons-Karp演算法
= Ford-Fulkerson演算法 + BFS
多起點終點 => 單起點&終點
11. 最小成本最大流演算法
解 最大權重完美二分匹配 解 最大化問題
二分匹配(Bipartite Matching)
用匈牙利演算法解決最大化問題,先將各個元素換成以最大元素減去其本身。
接著套用標準的匈牙利演算法:
13. 問題變轉(Problem Reduction)
14. NP-Completeness理論 #幹拎德這是三小鬼東西= =
- P:此類問題,可用 確定性多項式(時間) 演算法解決。
- NP:此類決策問題,可用 非確定性多項式(時間) 演算法解決。
- NP-hard:每個NP問題皆可 多項式時間變轉 為此類問題。
- NP-complete (NPC):此類問題 屬於NP-hard也屬於NP。
- 確定性演算法:需滿足以下條件
- 0或多個輸入
- 1個以上的輸出
- 有限性(finiteness):步驟數有限而且步驟執行會終止
- 明確性(definiteness):每個步驟必須明確且不含糊(unambiguous)
- 有效性(effectiveness):每個步驟必須是有效可行的(feasible)
- 非確定性演算法
- 包含兩個階段:
- 猜測(guess) / 選擇(choice)
- 檢查(check):檢查後使演算法「成功/不成功」結束
- 假設:NP演算法永遠會在第一階段非確定性地(事先無法確定地知道結果)做出對的猜測或選擇使演算法成功結束。
- 實務面:能執行NP演算法的機器目前並不存在
- 理論面:若問題能以NP演算法解決,則 NP
- 三個特別敘述:
Success
:演算法成功結束
Failure
:演算法不成功結束
Choice(S)
:從集合S裡任意地選出一個元素,
- 假設:
Choice(S)
是一個非確定性敘述,但它一定會挑中一個可以讓演算法成功結束的元素(除非這種元素不存在)。
- 實例:非確定漢米爾頓迴路演算法 NP
- 問題的 決策版本 vs 原始版本
- 例如:旅行銷售員(TSP)問題
- 原始版本:給定圖找最短的旅途(tour)或巡環(cycle)
- 決策版本:給定圖是否具有一個旅途的總長度常數c
- NPC證明 方法
- 欲證明 NPC:
- 證明 NP:寫一個可解 的NP演算法
- 證明 NPC s.t.
- 存在一個函數為polynomial-time computable
- 使得對所有 而言, iff 。
( 為 問題的解集合; 為 問題的解集合)
- 已知的NPC問題:SAT問題(滿足問題,Satisfiability Problem):
- 給一個布林函數,若存在一組輸入當作 s.t. ,則回傳
Success
;否則回傳Failure
。
- 為CNF,即數位電路中的product of sum,例:
- Cook’s Theorem:證明SAT問題 NPC,詳細就別看了,很難也不重要Orz
- 所有NP問題 SAT問題
- SAT P NP = P,但目前無法證明,也似乎不成立
- 舉例:證明3SAT問題為NPC
- 已知的NPC問題:
- SAT問題
- 3SAT問題:如 ,變數三個一組
- 集合覆蓋問題
- 0/1背包問題
- 旅行推銷員問題
- 分割問題
- 著色問題
- 完全圖或分團問題
- 點覆蓋問題
- 支配集合問題
- 參考:from 課程網站