數據結構筆記(7)算法設計思想
阿新 • • 發佈:2018-10-23
目標 算法 元素 code 前綴 規模 一次 劃分 n)
貪婪算法
- 調度問題(略)
- 哈夫曼編碼問題(Huffman)
- 前綴碼,歧義(待補)
- 算法:
- 假設字符的個數為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) |
快速選擇問題
- 概述:找出含N個元素的表S中的第k個最小的元素。
- 算法思想:
- 選取一個合適的元素作為樞紐元v
- 剩下的元素中,比v小的放在集合S1中,比v大的放在集合S2中,則整個表為S1-v-S2
- 如果k< S1,則遞歸的計算S1中第k小的元素得到目標解;
如果k=S1+1,則樞紐元v為目標解;
如果k> S1,則遞歸的計算S2中第(k-S1-1)個元素得到目標解。
- 如何選擇合適的樞紐元?(待補)
動態規劃算法(Dynamic Programming)
- 動態規劃的過程是一種回溯的思想。
硬幣選擇問題:
數據結構筆記(7)算法設計思想