HUFFMAN(C)
N=|C|;
Q=C;
for i=1 to n-1
allocate a new node 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);
二、算法分析
哈夫曼编码是一种无损压缩方法,其一般算法如下:
A、首先统计信源中各符号出现的概率,按符号出现的概率从大到小排序;
B、把最小的两个概率相加合并成新的概率,与剩余的概率组成新的概率集合;
C、对新的概率集合重新排序,再次把其中最小的两个概率相加,组成新的概率集合。如此重复进行,直到最后两个概率的和为l;
D、分配码字:码字分配从最后一步开始反向进行,对于每次相加的两个概率,给大的赋¨O",小的赋¨1¨(也可以全部相反,如果两个概率相等, 则从中任选一个赋¨O¨, 另一个赋"l¨即可),读出时由该符号开始一直走到最后的概率和¨1¨,将路线上所遇到的¨O¨和¨l¨按最低位到最高位的顺序排好,就是该符号的哈大曼编码。
例:设一幅灰度级为6(分别用a 1、a2、a3、a4、a5、a6表示)的图像中,各灰度所对应的概率分别为O.40、O.30、O.1 O、O.1 O、O.06、O.O4。现对其进行哈大曼编码,具体步骤如下:
(1)首 先对信源概率从大到小排序,选出最小的两个概率(O.06和O.04),相加得O.1,与其他概率组成新的概率集合(O.4,O.3,O.1,O.1,O.1);
(2)对新的概率集合重新排序,选出最小的两个概率(O.1和O.1),相加得O.