哈弗曼树和哈弗曼编码

最近总有人问我哈夫曼编码的问题,因此博主决定写一篇文章为大家捋一捋。

我们直接通过一个例子来了解一下哈夫曼编码,如下:

已知一个文件中各个字符及其对应的频率如下所示:

字符  a      b     c      d       e       f

频率 45    13   12   16     9        5

若采用哈夫曼编码,则字符序列“face”对应的编码为:

要求得哈夫曼编码我们首先需要画出哈夫曼树

1)        将字符按照频率从小到大进行排序:

f 5  e 9  c12  b 13 d 16  a 45

此时最小的两个为 f、e,我们将最小的作为左孩子,另一个作为右孩子,形成一个新的结点p1此时p1频率为14

《哈弗曼树和哈弗曼编码》 

2)        我们将新形成的结点和剩余的结点再次按照频率从小到大进行排序:

c 12   b13   p1 14    d 16   a 45

     此时将c、b形成新结点p2,p2的频率为25

        《哈弗曼树和哈弗曼编码》            

3)        继续将新旧结点排序:

P1 14     d16    p2 25    a 45

将p1、d 形成新结点p3,p3的频率为30

 

《哈弗曼树和哈弗曼编码》

4)        继续排序:

P2 25      p3  30      a 45

由p2、p3得到p4,p4的频率为55

           《哈弗曼树和哈弗曼编码》              

5)        剩下p4和a合成p5

                                  《哈弗曼树和哈弗曼编码》

6)        此时该题的哈夫曼树就已经画出来了,左分支为0,右分支为1,如图:

                    《哈弗曼树和哈弗曼编码》

 此时就可以得到“face”的哈夫曼编码为:110001001101  

以上为博主遇到哈夫曼编码时的求解过程,希望能够帮助到你们         


                    

 

    原文作者:哈夫曼树
    原文地址: https://blog.csdn.net/yyyyxcy/article/details/78330776
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞