算法復習-研一上
算法復習
包含主題: 貪心算法 , 分治法,動態規劃,回溯法,分支限界,線性規劃
關鍵詞:最優子結構
Q:貪心與動態規劃中間的聯系和區別 p93 後面總結 (背部問題,0-1背包問題)
遞歸分治算法
基本思想:將一個大的問題分成若幹小的子問題問題,分而治之
一般步驟:1.分解將原問題分為若幹規模小,相互獨立與原問題形式相同的問題 2.求解,求解各個子問題,當問題被劃分的足夠小的時候,就能很容易求解 3.合並,將子問題逐層合並,得到最後的解
經典問題
二分搜索:
合並排序(將想要排序的序列分為兩個大小相同的子集,然後分別排序,再合並 O(nlogn)):劃分策略是類似二分搜索,通過遞歸來一層層劃分直至只有一個,再一層層合並
快速排序:(將序列按照a[i]來劃分兩個子集,第一個子集裏面都比a[i]小,第二個子集都比a[i]大) :
大整數乘法(若要精確的求出大整數在乘法運算中所有位數上的值,需要用軟件的方法來求,):
有重復和無重復排列問題
貪心算法
基本思想:貪心算法總是做出當前最好的選擇,他期望通過局部最優解來得到全局最優解
能利用貪心算法來求解的算法一般有兩個特性:貪心選擇性質(原問題的整體最優解可以通過一系列的局部最優的選擇得到), 最優子結構(一個問題的最優解,包含其子問題的最優解)(因其具有最優子結構,可以用動態規劃來求解,但是貪心會更加簡單)
經典貪心選擇問題
選擇排序 每次從剩下的序列裏選出最大的一個,形成最後的最優解
冒泡排序
最優裝載(如何將最多的貨物裝上船) 采用重量最輕者優先的貪心策略來進行
活動安排(在會議時間不沖突的情況下,用有限的時間來進行最多的會議) 1.貪心策略的選擇,a.最早開始與時間不沖突策略,b.最短持續時間與不沖突策略 c.最早結束時間與不沖突策略 我們選擇C貪心策略,
求哈夫曼編碼:(前綴碼,任一字符的代碼都不能是其他字符的前綴求得最優的編碼方案) 貪心策略:在所有節點中選取權值最小的兩個節點作為新樹的左右節點,組成一個新的節點,權值為兩者之和
單源最短路徑(dijkstra算法,求得最短路徑(插值法)) :貪心策略,從初始狀態開始,一個一個的加入與之相連的值,然後求出當前所有節點的最短路徑,當將所有的點都加入時,就是最後的結果
最小生成樹:
prim算法(加邊): 貪心策略:在當前的子樹中,選取與之相連的最小權值且不形成環的邊
kruskal算法(選邊): 貪心策略:在所有的邊中,選取最小的且不形成環的邊
多機調度問題:
練習題
算法復習-研一上