由Huffman編碼以及相關的資料結構

2021-06-25 14:00:00 字數 514 閱讀 2897

貪心選擇演算法:huffman

實現huaffman編碼的資料結構有優先佇列,二叉樹(滿足這種性質的我們叫它huffmantree,或者最優二叉樹)

例子:abcde f

頻率:45 13121695

然後構造節點,節點結構

class binarytree

優先佇列:即權值最大的先出,這就可以用最大堆來實現。每次刪除乙個時,當然刪除的是根,調整;插入乙個時,插入到尾部,調整;刪除乙個,插入乙個時,把插入的放入根,調整。

取出根,然後調整,然後再取出根,用他們生成乙個新節點,代替原來的根,調整。重複此過程,直到堆中只剩下乙個節點。

最大堆其實可以用陣列表示(因為是完全二叉樹),當然也可以用指標來表示。在這裡我們用陣列來實現優先佇列(最小堆),因為用指標的形式的話,就得在節點中再增加2個指標,用來表示堆結構中的指向。

即:

class binarytree

Huffman編碼的實現

這裡的huffman編碼就是離散數學中學的最優二叉樹,現在我們用c 來實現它。首先考慮實現它使用的資料結構,當然這裡肯定使用二叉樹。其次就是儲存方式,對於樹一般情況是用間接儲存也就是鍊錶。但是二叉鍊錶不方便尋找雙親節點,這裡使用向量更好,對儲存空間的利用率也較高。建立資料結構 huffman樹中每個...

Huffman編碼的實現

include include define maxbit 100 定義哈夫曼編碼的最大長度 define maxvalue 100000 定義最大權值 define maxleaf 300 定義哈夫曼樹中最多葉子節點個數 define maxnode maxleaf 2 1 哈夫曼樹最多結點數 u...

正規化Huffman編碼的實現

傳統的 huffman 編碼依賴於二叉樹,一方面 huffman 編碼生成的速度不夠快,另一方面在沒有指標的程式語言中要實現二叉樹結構又非常複雜。所以懂得構造正規化huffman編碼去解決一些問題在某些方面就很有必要。正規化huffman編碼相比與傳統huffman編碼,不需要建造huffman樹,...