第一節課(1)

一、課本

《算法導論》第三版

二、參考書

《算法》《算法分析》《計算機程序設計藝術》《具體數學》

三、課程大綱

  • 基礎知識(漸進記號及遞歸)
  • 分而治之(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都有T(n)\leq c\cdot f(n),則可認爲在n足夠大之後,f(n)給出                                    了T(n)增長速度的一個漸近上界。記之爲:T(n)=O(f(n))
  • 大Ω(漸近下界):若存在正常數c和函數g(n),使得對任何n>>2都有T(n)\geq c\cdot g(n),則可認爲在n足夠大之後,g(n)給出                                  了T(n)增長速度的一個漸近下界。記之爲:T(n)=\Omega (g(n))
  • 大Θ(漸近緊界):若g(n) = f(n),則可用大Θ表示。若存在正的常數c_{1} < c_{2}和函數h(n),使得對於任何n >> 2都有                                            c_{1}\cdot h(n) \leq T(n) \leq c_{2}\cdot h(n),則可認爲在n足夠大之後,h(n)給出了T(n)的一個確界。                                                          記之爲:T(n)=\Theta (h(n))

            總結:大O記號是對算法執行效率的悲觀估計,大Ω記號是對算法執行效率的樂觀估計,大Θ記號是準確估計。

圖1 大O記號、大Ω記號和大Θ記號

                以上主要的三種漸近複雜度記號之間的聯繫與區別可直觀地由圖1示意。

            算法優化: 《編程珠璣》

        解決遞歸:

  • 遞歸樹法(構建遞歸樹求解)
  • 代入法/替代法(猜後證明)
  • 主方法(公式)

重點!!!

公式:如果T(n)=aT(\left \lceil \frac{n}{b} \right \rceil)+O(n^{d}),a>0,b>1,d>=0,                                                                                                         

T(n)=\left\{\begin{matrix} O(n^{d}), & & & & if d>log{_{b}}^{a}& & & & & & & & & & \\ O(n^{d}logn), & & & & if d=log{_{b}}^{a}& & & & & & & & & \\ O(n^{log{_{b}}^{a}}),& & & &if d<log{_{b}}^{a}\end{matrix}\right.

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章