一、課本
《算法導論》第三版
二、參考書
《算法》《算法分析》《計算機程序設計藝術》《具體數學》
三、課程大綱
- 基礎知識(漸進記號及遞歸)
- 分而治之(MSC、PM、快排)
- 動態規劃(0-1揹包等)
- 貪心算法(HUffman編碼和部分揹包)
- 圖算法(BFS、DFS、SP、MST、最大流和匹配)
- 處理難解問題(P、NP、NPC和近似算法)
四、課程主題
- 設計高效算法
- 證明算法正確性
- 分析算法運行時間
五、算法
1.計算問題:想要的輸入輸出關係的規格。
例:排序 輸入:一組數 輸出:該組數排序後的一組數
2.實例:問題的任何有效輸入
例:排序 <8,3,6,7,1,2,9>
3.算法:將輸入轉爲輸出並實現想要的輸入輸出關係的計算程序
六、分析算法
1.空間複雜度,時間複雜度
2.機器無關運行時間:算法使用的主要操作的數量。n-輸入規模,T(n)-運行時間
3.三種分析:最好(無用)、最壞(常用)、平均(複雜)
4.比較時間複雜度:漸近分析
漸近記號:(可用高數極限中的無窮大的階分析)
- 大O(漸近上界):若存在正常數c和函數f(n),使得對任何n>>2都有,則可認爲在n足夠大之後,f(n)給出 了T(n)增長速度的一個漸近上界。記之爲:。
- 大Ω(漸近下界):若存在正常數c和函數g(n),使得對任何n>>2都有,則可認爲在n足夠大之後,g(n)給出 了T(n)增長速度的一個漸近下界。記之爲:。
- 大Θ(漸近緊界):若,則可用大Θ表示。若存在正的常數和函數h(n),使得對於任何n >> 2都有 ,則可認爲在n足夠大之後,h(n)給出了T(n)的一個確界。 記之爲:。
總結:大O記號是對算法執行效率的悲觀估計,大Ω記號是對算法執行效率的樂觀估計,大Θ記號是準確估計。
以上主要的三種漸近複雜度記號之間的聯繫與區別可直觀地由圖1示意。
算法優化: 《編程珠璣》
解決遞歸:
- 遞歸樹法(構建遞歸樹求解)
- 代入法/替代法(猜後證明)
- 主方法(公式)
重點!!!
公式:如果,a>0,b>1,d>=0,