貪心演算法 Huffman Tree

2021-07-04 23:49:39 字數 939 閱讀 3423

huffuman 編碼問題:

變長編碼(variable-length code)可以達到比定長編碼好很多的壓縮率,其思想史賦予高頻字元短碼字,低頻字元長碼字。字首碼(prefix code)可以保證

沒有任何碼字是其他碼字的字首。赫夫曼編碼採用依賴於貪心演算法選擇性質和最優子結構 構造最優字首碼。

其執行過程如下: 選擇當前最小的兩個節點作為樹左右子節點,並把和作為下次統計的物件中。

構造hafuman樹: 選取當前最小頻率的兩個節點,作為樹的左右子節點,按從下往上的順序構huffman樹。最後返回根節點

node gethuffmantree() 

} return nodearray[0];

}

哈弗曼 編碼:  s.erase(s.end()-1); 是往父節點回退,從而按從上往下層級、左,中,右順序 遍歷完樹

最後記下 動態規劃和貪心演算法的不同,雖然都具有最優子結構性質(問題最優解包含子問題最優解), 貪心演算法僅僅是做出區域性最優來構造全域性最優,不考慮子問題的解。而動態規劃,每次進行選擇通常依賴子問題的解,自底向上的方式,先求解子問題,然後較大子問題。貪心演算法總是做出當時看來最佳,然後求解剩餘子問題,與將來的問題無關。

**:參考:

《演算法導論》

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...

演算法 貪心演算法

集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...