哈弗曼树构建:每次选取频率最小和次小的两个字符;
将这两个字符从序列中删去;
新建一个节点
按照左小右大,分别作为新节点的左右子树;
新节点的频率为其左右子树频率之和;
将新节点插入字符序列中;
重复以上过程,知道序列中指一个节点(字符)
算法伪代码:
符号说明:
C是n个字符的集合;
对于每个c∈C,c都是一个对象:c.freq为该字符出现的频率
Q为一个以c.freq为关键字的最小优先队列
EXTRACT_MIN(Q):表示从优先队列中选出最小的元素,并删除该元素。
核心代码:
void hunfuman(C)
n=|C|;
Q=C;
for i=1 to i=n-1
创建一个新节点z ;
z.left=x=EXTRACT_MIN(Q);
z.right=y=EXTrACT_MIN(Q);
z.freq=x.freq+y.freq;
Insert(Q,z);
return EXTRACT_MIN(Q);