1. 程式人生 > >算法復習

算法復習

判斷 最長遞增子序列 發現 逆向 計算 自底向上 選擇 problem 編輯距離

. 簡答題的基本內容(30分)

記號OW的意義;

分治法的基本步驟;

1、將原問題分解成k個規模較小的子問題,這些子問題相互獨立且與原問題的形式相同。

2、遞歸地求解這些子問題,當問題足夠小時直接求解。

3、把子問題的解進行合並。

動態規劃算法的兩個基本要素;

1、具有最優子結構

2、子問題重疊

設計動態規劃算法的步驟;

1、定義子問題

2、寫出遞歸表達式

3、決定子問題的求解次序

4、根據計算最優值時得到的信息,構造最優解。

分治法與動態規劃兩種算法策略的異同點;

分治法與動態規劃的相同點:
分治法與動態規劃,二者要求原問題具有最有子結構,都是將問題分而治之分解成若幹個規模較小的子問題;

不同點:
動態規劃是將原問題分解為多個子問題,通過計算出子問題的結果構造一個最優解。動態規劃通過叠代法自底向上求解,動態規劃將分解後的子問題理解為相互間有聯系,有重疊的部分;
分治法是將原問題分解為多個子問題,利用遞歸對各個子問題獨立求解,最後利用各子問題的解進行合並形成原問題的解。分治法將分解後的子問題看成是相互獨立的。

貪心法的兩個基本要素;

1、貪心選擇性質,所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列局部最優的選擇,即貪心選擇來達到。這是貪心算法可行的第一個基本要素,也是貪心算法與動態規劃算法的主要區別。貪心算法所做的貪心選擇可以依賴於以往所做出的選擇,但決不依賴將來所做的選擇,也不依賴於子問題的解。正是由於這種差別,動態規劃算法通常以自底向上的方式解各子問題,而貪心算法則通常以自頂向下的方式進行,以叠代的方式做出相繼的貪心選擇,每做一次貪心選擇就將所求問題簡化為規模更小的子問題。

2、最優子結構性質

貪心法的算法正確性證明的基本策略;

1、貪心算法領先:每一步都比其他算法好,從而能得到一個最優解。

2、交換論證(Exchange Argument):該方法的主要的思想也就是先假設存在一個最優的算法和我們的貪心算法最接近,然後通過交換兩個算法裏的一個步驟(或元素),得到一個新的最優的算法,同時這個算法比前一個最優算法更接近於我們的貪心算法,從而得到矛盾,原命題成立。

3、結構論證(structural):發現一個所有解都具有的界限,然後證明算法總是能達到這個界限。

貪心法與動態規劃兩種算法策略的異同點;

相同點:

動態規劃和貪心算法都是一種遞推算法 均用局部最優解來推導全局最優解

不同點:

動態規劃是將原問題分解為多個子問題,通過計算出子問題的結果構造一個最優解。動態規劃通常通過叠代法自底向上求解,動態規劃將分解後的子問題理解為相互間有聯系,有重疊的部分。

貪心算法依賴於當前已經做出的所有選擇,采用自頂向下(每一步根據策略得到當前一個最優解,保證每一步都是選擇當前最優的)的解決方法。貪心算法所做的貪心選擇可以依賴於以往所做出的選擇,但決不依賴將來所做的選擇,也不依賴於子問題的解。

在對圖的深度優先搜索過程中,可將頂點的狀態區為分哪三種類型、將有向圖中的邊區分為哪四種類型;

頂點狀態:白色(未被發現的頂點)、灰色(已經發現,但還未搜索完成)、黑色(已經完成搜索的頂點)

有向圖邊的類型:樹邊、回邊、前向邊、橫跨邊

如果有向帶權圖中存在邊的權值為負的情形,如何判斷圖中是否存在負環;

Bellman-Ford算法在|V|-1次叠代之後求得從源點到其他頂點的最多|V|-1條邊的最短路徑,在|V|-1次叠代之後再執行一次叠代過程,如果某個頂點的dist值減少了,說明圖中存在環。

最大流、最小割的概念;

最大流最小割定理的內容及其證明方法;

給定指定的一個有向圖,其中有兩個特殊的點源S(Sources)和匯T(Sinks),每條邊有指定的容量(Capacity),求滿足條件的從S到T的最大流(MaxFlow).

1. 網絡流的割:是網絡中頂點的一個劃分,把所有頂點劃分成兩個頂點集合S和T,其中源點s屬於S,匯點t屬於T,記作CUT(S,T)。

2. 割的割邊:如果一條弧的兩個頂點一個屬於頂點集S一個屬於頂點集T,該弧為割CUT(S,T)的一條割邊。

3. 從S指向T的割邊是正向割邊;
從T指向S的割邊是逆向割邊。

4. 割的容量:所有正向割邊的容量和,不同割的容量不同。

6. 定理一:如果f是網絡中的一個流(不必須是最大流),CUT(S,T)是任意一個割,那麽f的值等於該割中的正向割邊的流量和與逆向割邊的流量和之差。
6.1. 推論1:如果f是網絡中的一個流,CUT(S,T)是一個割,那麽f的值不超過割CUT(S,T)的容量。
6.2. 推論2:網絡中的最大流不超過任何割的容量。
7. 定理二:在任何網絡中,如果f是一個流,CUT(S,T)是一個割,且f的值等於該割的容量,那麽f是一個最大流,CUT(S,T)是一個最小割(容量最小的割)。
8. 定理三:最大流最小割定理:在任何網絡中,最大流的值等於最小割的容量。

“多項式歸約(reduction)”的概念與用途;

P 問題、NP問題、NP完全問題、NP困難問題(NP-hard problem)的概念;

NP完全問題的實際證明方法;

常見的NP完全問題

回溯法、分支限界等搜索算法的基本思想

. 應用題(40分)

多段圖上的最短路徑動態規劃推導

圖的深度優先搜索算法的擴展及應用

強連通分量的劃分算法

Bellman-Ford算法的基本思想與過程

最大流最小割問題的求解算法Ford-Fulkerson(增廣路徑算法)過程及應用,如二部圖匹配、邊不交路徑問題、項目選擇問題等

遞歸方程的求解方法

三.算法設計題(30分)

分治法:如統計逆序對、中位數查找、主元素查找問題等

貪心法:區間調度問題、區間劃分問題等

動態規劃:最長遞增子序列問題、編輯距離問題、矩陣連乘問題、背包問題等

圖算法:最短路徑問題、傳遞閉包和Floyd算法等

算法復習