序言
對於哈夫曼編碼,個人的淺薄理解就是在壓縮儲存空間用很大用處。
用乙個很簡單例子,儲存一篇英文文章時候,可能a出現的概率較大,z出現的記錄較小,如果正常儲存,可能a與z儲存使用的空間一樣。但是用哈夫曼編碼方式,a經常出現,所用編碼長度就短。
構造哈夫曼樹,生成哈夫曼編碼
一、定義節點型別
struct node
};二、定義樹型別(節點陣列)
三要素:不定長陣列,元素大小,有效元素個數
struct roota
~roota()
};三、建立哈夫曼樹
1.將每乙個節點都當成一棵樹,初始化陣列大小,並進行賦值
roota ra(4);
//1.在ra.nodea中存入字母和權值
for (ra.n = 0;ra.n < ra.size;ra.n++)
2.將樹按權值大小排序
void sort(roota *ra)
} if (!esc) return;
}}3.(1)遍歷陣列,將ra.nodea[0]和ra.node[1]合併,其餘向前移動,重新排序
(2)將ra.nodea[0],ra.nodea[1]分別放在新合併的ra.nodea[0]的左右子結點中
while (ra.n > 1)
ra.n = ra.n - 1;
//2.排序
sort(&ra);
}4.輸出哈夫曼編碼
遞迴,找到葉子節點,記錄路徑,左記錄0,右記錄1,直到輸出所有葉子節點
void cratecode(node *t,string &s)
else {
cout << "哈夫曼編碼:";
cout << t->c << ":" << s<
以上是對構造哈夫曼樹以及生成哈夫曼編碼的總結,希望對你們有所幫助!
本文標題: c++實現哈夫曼樹的方法
本文位址:
哈夫曼樹(C 實現方法)
對於哈夫曼編碼,個人的淺薄理解就是在壓縮儲存空間用很大用處。用乙個很簡單例子,儲存一篇英文文章時候,可能a出現的概率較大,z出現的記錄較小,如果正常儲存,可能a與z儲存使用的空間一樣。但是用哈夫曼編碼方式,a經常出現,所用編碼長度就短。一 定義節點型別 struct node 二 定義樹型別 節點陣...
哈夫曼樹與哈夫曼編碼(C 實現)
1 對給定的n個權值構成n棵二叉樹的初始集合f 其中每棵二叉樹ti中只有乙個權值為wi的根結點,它的左右子樹均為空。2 在f中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。3 從f中刪除這兩棵樹,並把這棵新的二叉樹同樣以公升序排列加入到...
哈夫曼樹 C 實現
include using namespace std define maxbit 10 define maxvalue 10000 define maxleaf 100 define maxnode maxleaf 2 1 定義哈夫曼樹編碼型別 typedef structcodetype 定義哈...