《演算法之道》精華 演算法設計部分

來源:互聯網
上載者:User

標籤:演算法之道   動態規劃   貪婪   分治   隨機化   

《演算法之道》精華 演算法設計部分
  • 本書作者縐恒明,作者另有一本書《資料結構之弦》,以及《作業系統之哲學原理》都是很好的書
  • 這本書可以算得上是深入淺出,文筆很好,作者添加了很多自己的思考
  • 本文僅包括演算法設計部分,演算法分析略去,並沒有嚴格按照章節順序來記錄
附錄 演算法隨想
  • 有人喜歡遍曆,希望踏遍千山萬水,人生豐富多彩;有人一生貪婪,眼界不寬,及時行樂;有人註定窮搜,辛辛苦苦,收穫有限;有人善用時空均衡,用最少的時間辦最多的事情,十分精明;有人會分治,再難的問題也能解決;有人動態規劃,積少成多
第三章 分治與遞迴
  • 生活中的例子:天平秤球以辨明次品;乘法運算;世界盃晉級賽;秦國合縱連橫
  • 分治策略步驟:1,將問題分為若干小問題;2,遞迴解決這些子問題;3,合并子問題的解答,得到大問題的解
  • 標準分治策略的定義裡麵包含遞迴:T(n) = aT(n/b) + f(n)
  • 遞迴式複雜度大師解法:
    T(n) = aT(n/b) + f(n) = a^2T(n/b^2) + af(n/b) + f(n)= a^(log_b(n)) T(1) + a^(log_b(n-1) f(n/b^(log_b(n-1))) +...+a^2f(n/b^2) + af(n/b) + f(n)= O(n^log_b(a)) + sum(a^j f(n/b^j))|(j = 0...log_b(n-1))
  • 前項為遞迴樹最後一層節點數,後項為遞迴樹各層分治過程分解與合并的代價
  • f(n) < n^log_b(a)時,T(n) = O(n^log_b(a))
  • f(n) > n^log_b(a) : T(n) = O(f(n))
  • 演算法題中常見分治例子:乘方運算、矩陣乘法、斐波那契數列的矩陣乘方解法、VLSI布線
第四章 動態規劃
  • 動態規劃是一種更有針對性的分治,分解得到的小問題很多重複,儲存已經計算得到的結果可以免去重複計算
  • 動態規劃每一步做出一個最優選擇,該最優選擇與子問題的最優解組合得到大問題的最優解
  • 具體步驟:
    1. 證明問題的解決方案中包括一個選擇,選擇後剩下一個或多個子問題
    2. 設計遞迴描述方式,得到遞迴方程
    3. 證明對大問題的最優解包括對所有子問題的最優解
    4. 證明子問題之間重疊
  • 兩個原則:最優子結構,重疊子問題
  • 動態規劃的時間複雜度:全部子問題數量x選擇成本
  • 演算法題中常見動態規劃例子:最長公用子序列(最長遞增、最長遞減子序列,編輯距離)、最優二叉搜尋樹
第五章 貪婪選擇思想
  • 動態規劃在做出選擇之前,將所有選擇的結果做了比較,而如果選擇的時候不經過比較,而是直接選擇局部最優,就是貪婪
  • 貪婪的目的只是找出一種可行解,在一定情況下找出的是最優解
  • 貪婪與動態規劃相同,都是一種分治策略。但與動態規劃不同,貪婪將大問題分解為一個,而不是多個子問題
  • 具體步驟:
    1. 將原問題表述為一個做出一個選擇,然後剩下唯一一個子問題的形式
    2. 證明所有的最優選擇裡面總有一個是貪婪選擇
    3. 證明貪婪選擇加上對剩下子問題的最優解導致大問題的最優解
  • 貪婪的兩個原則:最優子結構(大問題的最優解包括小問題的最優解),貪婪選擇屬性
  • 貪婪選擇屬性:每個小問題可以貪婪選擇獲得
  • 演算法題中常見貪婪例子:
    • 背包問題:財寶是否可以分割、每件財寶是否可以重複拿四個版本
    • 教室課程規劃
    • 最小產生樹
      • Kruskal演算法,每次加入一個不形成環的最小的邊,複雜度為O(E log(V))
      • Prime演算法:每次加入距離最近的點,並降距,複雜度為O(V^2),採用堆實現,可以達到O(E log(V))
    • 霍夫曼編碼
第六章 隨機化思想
  • 蒙特卡洛演算法:大機率輸出正確答案,複雜度固定
  • 常見隨機化演算法例子:
    • 素性測試:根據費馬小定理,若p為素數,則(a^p - a) % p == 0;如果測試一百次都成立,則為合數的機率只有2^(-100)
    • 矩陣乘積結果驗證:取隨機二進位01向量z,有zAB = z(AB)
    • 線性時間最小產生樹演算法

  
  

轉載請註明Focustc,部落格地址為http://blog.csdn.net/caozhk,原文連結為點擊開啟
  
  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.