一、原理
频率:
原理:
构造的方法就是将所有的指令按使用的频度(也就是程序中出现的概率)由小到大依次排列,每次将两个使用频度最小合并在一起,构成一个频度为两者之和的新结点,将其与余下的结点放在一起。接着再从这些结点中继续找两个使用频度最小合并在一起,构成一个频度为两者之和的新结点。重复上述过程,全部结点合并完成。
过程:
0.01和0.02是目前最小的,结合为0.03
0.03和0.03是目前最小的,结合为0.06
0.06和0.06是目前最小的,结合为0.12
0.07和0.07是目前最小的,结合为0.14
…
二、伪代码
HUFFMAN()
// 共有n个数
n ← |C|
// 优先级队列(谁小谁在队首)
Q ← C
// n个数有n-1对
for i ← 1 to n-1
// 分配一个新的结点,联合两个最小结点
do allocate a new node z
// 新结点的左孩子就是弹出的一个最小队首
left-son[z] ← x ← EXTRACT-MIN(Q)
// 新结点的右孩子就是弹出的一个最小队首
right-son[z] ← y ← EXTRACT-MIN(Q)
// 新结点的频率就是两子节点频率之和
f[z] ← f[x] + f[y]
// 将新结点插入到优先级队列中
INSERT(Q, z)
// 返回树根
return EEXTRACT-MIN(Q)