1. 程式人生 > >資料結構和演算法解:第九章 演算法設計技巧

資料結構和演算法解:第九章 演算法設計技巧

9.1 貪婪演算法

演算法思想:貪婪演算法分階段的工作。在一個階段,可以認為是所做的決定中最好好的,而不考慮將來的後果。通常,這意味著選擇的是某個區域性最優。這種“眼下就能拿到的就拿”的側臉是這類演算法的來源。在演算法終止的時候,我們希望區域性最優等於全域性最優。

9.2 分治演算法

分治演算法由兩部分組成:

  • 分(divide):遞迴解決較小的問題。
  • 治(conquer):然後從子問題的解構建原問題的解。

傳統上至少有兩個遞迴呼叫的程式叫做分治演算法。

9.3 動態規劃

任何數學遞推公式都可以直接轉換成遞迴演算法,但是基本的實現是編譯器常常不能正確對待遞迴演算法,結果導致低效的程式。當懷疑很可能是這種情況的時候,我們必須再給編譯器提供一些幫組,將遞迴演算法轉換成非遞迴演算法。讓後者把那些子問題的答案系統地記錄在一個表內。利用這種方法的一種技巧叫做動態規劃