第一章 算法引論
算法分析的目的:估算該算法所需的內存空間和運行時間。
分析算法復雜度的目的:用以比較同一問題的不同算法;時間和空間的增長率作為衡量的標准。
算法是對解決這個問題的方法和步驟的描述。
算法的基本特征:有窮性、確定性、可行性、0到多個輸入、1到多個輸出。
一個好的算法應具有正確性、可讀性、健壯性和高效性和低存儲量需求等特征。
第二章 遞歸與分治策略
遞歸的概念:直接或者間接的調用自身的算法。
遞歸函數:用函數自身給出定義的函數。
構成遞歸式的兩個基本條件:遞歸的邊界條件和遞歸的定義(遞歸公式)。
分治法的基本思想:將一個規模為n的問題分解為k個規模較小的子問題,這些子問題相互獨立且與原問題相同。遞歸的解決這些子問題,然后將各個子問題的解合並得到原問題的解。
第三章 動態規划
簡述動態規划算法解題的基本步驟
1、找出最優解的性質,並刻畫其結構特征;
2、遞歸的定義最優值;
3、用自底向上的方法計算最優值;
4、根據計算最優值時得到的信息,構造最優解;
簡述動態規划和分治法的異同。
相同點:動態規划與分治法類似,其基本思想也是將待求解的問題分解成若干子問題,然后從這些子問題的解得到原問題的解。
不同點:分治法的子問題互相獨立且與原問題相同;動態規划求解的問題,經分解得到的子問題,往往不是相互獨立的,就是各個子問題包含公共的子問題。
動態規划的基本要素
1、最優子結構
2、重疊子問題
簡述備忘錄方法與動態規划的異同
相同點:備忘錄方法和動態規划都有相同的控制結構。
不同點:備忘錄方法的遞歸方式是自頂向下,動態規划則是自底向上;備忘錄方法通過建立備忘錄避免了相同子問題的重復求解。
快速排序算法的性能取決於划分的對稱性。
第四章 貪心算法
貪心算法的基本條件
1、貪心的選擇性質
2、最優子結構性質
簡述動態規划和貪心算法的異同
相同點:都有最有子結構性質。
不同點:貪心具有貪心選擇性質(所求問題的整體最優解可以通過一系列局部最優的選擇,即貪心選擇來到達);動態規划通常以自底向上的方式解各個子問題,貪心算法通常以自頂向下的方式進行。
簡述Prim算法和Kruskal算法的異同
相同點:都可以運用貪心算法構造最小生成樹,都利用了最小生成樹的性質。
不同點:Prim算法通過擴展連通子集來進行貪心選擇;Krusikal算法通過選擇具有最小權的邊的集合來進行貪心選擇,在選擇時,進行連通操作以便生成樹。
第五章 回溯法
回溯解題的步驟
1、針對所給問題定義問題的解空間。
2、確定易於搜索的解空間結構。
3、以深度優先方式搜索解空間,並在搜索過程中用剪枝函數避免無效的搜索。
回溯法搜索解空間樹時常用的兩種剪枝函數為約束函數和界限函數。
第六章 分支界限法
簡述分支界限法的搜索策略
1、以寬度優先和以最小耗費(最大效益)優先的方式搜索問題的解空間樹。
2、每個活節點只有一次成為擴展節點
3、活節點成為擴展節點就一次性生成其所有的子節點。
4、兒子節點中,導致不可行節點和非最優節點的節點被舍棄,其余節點加入到活節點表中,當前活節點從表中刪除。
5、從活節點中取出下一個節點成為當前擴展節點,並重復上述節點擴展過程。一直搜索到解或者活節點表為空為止。
分支界限法:隊列式分支界限法和優先隊列式分支界限法。
活節點的組織形式有:最大堆和最小堆。
簡述分支界限法和回溯法的異同
相同點:都是對子集樹和排列樹的搜索。
不同點:求解目標不同,分支界限法的求解目標是找出滿足約束條件的也一個解,或是在滿足約束的解中找出某種意義的最優解;回溯法找到的是解空間滿足約束條件的所有解。搜索策略不同:分支界限法以廣度優先搜索或以最小花費優先的方式進行搜索;回溯法以深度優先搜索的方式進行搜索。
第七章 概率算法
數值概率算法求近似解,精度和時間成正比。
蒙特卡羅算法求的是准確解,但未必正確,正確率和時間成正比。
拉斯維加斯算法不會得到不正確解,得到正確解的概率和時間成正比。
舍伍德算法總能得到解,並且解一定是正確的。最壞時間復雜度和平均時間復雜度差距很大時,可用舍伍德算法進行平均。
第八章 NP完全性理論
P類問題:P={L|L是一個能在多項式時間內被一台DTM所接受的語言}。由此語言定義的問題。
NP類問題:P={L|L是一個能在多項式時間內被一台NDTM所接受的語言}。由此語言定義的問題。
NPC問題:(1)L屬於NP;(2)對於所有L'屬於NP有L'正無窮PL;由此語言定義的問題。