1. 程式人生 > >數據結構筆記(7)算法設計思想

數據結構筆記(7)算法設計思想

目標 算法 元素 code 前綴 規模 一次 劃分 n)

貪婪算法

  • 調度問題(略)
  • 哈夫曼編碼問題(Huffman)
    1. 前綴碼,歧義(待補)
    2. 算法:
      • 假設字符的個數為C
      • 一顆樹的權等於其樹葉的頻率的和,任意選取最小權的兩棵樹T1和T2,並任意形成以T1和T2為子樹的新樹,將這樣的過程進行C-1次
      • 在算法的開始,我們擁有C顆樹,每個字符以它自身作為一顆樹,在算法的結束我們得到一棵樹

分治算法(Divide & Conquer)

  • 分(divide):遞歸解決較小的問題
  • 治(conquer):從子問題的解構建原問題的解
  • 分治算法的主定理
    • n 表示問題規模
    • a 表示一次遞歸將問題劃分為多少個子問題
    • b 表示子問題的規模
    • f(n)表示非遞歸步驟的開銷
    • 得到公式:T(n)=aT(n/b)+f(n) (a>=1;b>1)
case T(n) c f(n)
Case 1 T(n)=O(nlogb^a) c< log b^a (a>b^c) f(n)=O(n^c)
Case 2 T(n)=O(n^c log^k+1 n) c= log b^a (a=b^c) f(n)=O(n^c log^kn)
Case 3 T(n)=O(f(n)) c> log b^a (a< b^c) f(n)=Ω(n^c)
快速選擇問題
  1. 概述:找出含N個元素的表S中的第k個最小的元素。
  2. 算法思想:
    • 選取一個合適的元素作為樞紐元v
    • 剩下的元素中,比v小的放在集合S1中,比v大的放在集合S2中,則整個表為S1-v-S2
    • 如果k< S1,則遞歸的計算S1中第k小的元素得到目標解;
      如果k=S1+1,則樞紐元v為目標解;
      如果k> S1,則遞歸的計算S2中第(k-S1-1)個元素得到目標解。
  3. 如何選擇合適的樞紐元?(待補)

動態規劃算法(Dynamic Programming)

  • 動態規劃的過程是一種回溯的思想。
硬幣選擇問題:

數據結構筆記(7)算法設計思想