1. 程式人生 > >算法復習-研一上

算法復習-研一上

精確 大小 規劃 持續時間 初始 nlog 哈夫曼編碼 最短路徑 子集

算法復習

包含主題: 貪心算法 , 分治法,動態規劃,回溯法,分支限界,線性規劃

關鍵詞:最優子結構

Q:貪心與動態規劃中間的聯系和區別 p93 後面總結 (背部問題,0-1背包問題)

遞歸分治算法

基本思想:將一個大的問題分成若幹小的子問題問題,分而治之

一般步驟:1.分解將原問題分為若幹規模小,相互獨立與原問題形式相同的問題 2.求解,求解各個子問題,當問題被劃分的足夠小的時候,就能很容易求解 3.合並,將子問題逐層合並,得到最後的解

經典問題

二分搜索:

合並排序(將想要排序的序列分為兩個大小相同的子集,然後分別排序,再合並 O(nlogn)):劃分策略是類似二分搜索,通過遞歸來一層層劃分直至只有一個,再一層層合並

快速排序:(將序列按照a[i]來劃分兩個子集,第一個子集裏面都比a[i]小,第二個子集都比a[i]大) :

大整數乘法(若要精確的求出大整數在乘法運算中所有位數上的值,需要用軟件的方法來求,):

有重復和無重復排列問題

貪心算法

基本思想:貪心算法總是做出當前最好的選擇,他期望通過局部最優解來得到全局最優解

能利用貪心算法來求解的算法一般有兩個特性:貪心選擇性質(原問題的整體最優解可以通過一系列的局部最優的選擇得到), 最優子結構(一個問題的最優解,包含其子問題的最優解)(因其具有最優子結構,可以用動態規劃來求解,但是貪心會更加簡單)

經典貪心選擇問題

選擇排序 每次從剩下的序列裏選出最大的一個,形成最後的最優解

冒泡排序

最優裝載(如何將最多的貨物裝上船) 采用重量最輕者優先的貪心策略來進行

活動安排(在會議時間不沖突的情況下,用有限的時間來進行最多的會議) 1.貪心策略的選擇,a.最早開始與時間不沖突策略,b.最短持續時間與不沖突策略 c.最早結束時間與不沖突策略 我們選擇C貪心策略,

求哈夫曼編碼:(前綴碼,任一字符的代碼都不能是其他字符的前綴求得最優的編碼方案) 貪心策略:在所有節點中選取權值最小的兩個節點作為新樹的左右節點,組成一個新的節點,權值為兩者之和

單源最短路徑(dijkstra算法,求得最短路徑(插值法)) :貪心策略,從初始狀態開始,一個一個的加入與之相連的值,然後求出當前所有節點的最短路徑,當將所有的點都加入時,就是最後的結果

最小生成樹:

prim算法(加邊): 貪心策略:在當前的子樹中,選取與之相連的最小權值且不形成環的邊

kruskal算法(選邊): 貪心策略:在所有的邊中,選取最小的且不形成環的邊

多機調度問題:

練習題

算法復習-研一上