1. 程式人生 > >貪心演算法——Huffman編碼(哈夫曼編碼)

貪心演算法——Huffman編碼(哈夫曼編碼)

注:實現Huffman編碼是用貪心演算法來實現的,證明Huffman的貪心選擇和最優子結構很麻煩,我沒有看懂(演算法導論.中文版P234),這裡只是給出了實現Huffman編碼的實現程式碼。實現Huffman最好的資料結構時優先順序佇列(可以通過最小堆來實現)。整個演算法的時間複雜度可以達到nlg(n),這裡為了簡單,沒有實現最小堆,而使用的是STL中的set,通過實現正確的比較函式物件,每次可以取得優先順序(字元出現頻度最低)最大的值。但是這裡的時間複雜度卻提高了,因為操作set的選擇時,時間複雜度時lgn,但是隨著選擇的,選擇“未被訪問的最高優先順序的兩個元素(flag=0)”的探測次數也為增大,平均探測次數是n/2,因此最後實現Huffman的時間複雜度將是n^2lg(n)。當然也可以通過記錄每次選擇元素時其在set中的位置(偏移量),下次選擇時直接通過這個偏移量找到合適位置,探測的時間複雜度將會是1,最後實現Huffman的時間複雜度也可以達到nlog(n)。

n^2lg(n)的實現程式碼如下: