解决哈夫曼编码树问题

 哈夫曼编码树解码概念
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止
emmmm很绕对吧,那咱们来电通俗易懂点的例子。(期末考试题是第二个例子

 

 

比如说 a,b,d,c,d,f 出现的频率是 12345次

并写出a~f的前辍编码,规定左孩子编码为0,右孩子编码为1

 

据题意得:

那么我们来做一个集合

{1,2,3,4,5}

①先取最小的俩数。最小的俩数不就是1,2了嘛。

②把这俩合并起来。他们俩的根节点是他们俩相加的值

 

来我们先画出来。

   3

 /      \  

1      2

对就像这样,然后这时候就新生成了新的集合{3,3,4,5}(注意1,2就已经合给3了)

我们再重复刚才的两个步骤, 取最小的俩数,不就是3,3了  来画出来

         6

     /       \

    3        3

  /     \

1       2

集合更新(6,4,5)  这时候我们发现出现了新的最小数  4,5

         6               9

     /       \          /    \

    3        3      4     5

  /     \

1       2

现在集合就剩下  6 和9了  (解完了)

               15

           /          \ 

       6               9

     /       \          /    \

    3        3      4     5

  /     \

1       2

左子树为0 右子树为1.ABCDE一定是叶子结点,所对应的哈弗曼编码就是从根节点“读”下来。 所以各字符对应的编码为:A->11,B->10,C->00,D->011,E->010

哈夫曼编码是一种无前缀编码。解码时不会混淆。其主要应用在数据压缩,加密解密等场合。

 

 

 

例题写完了,咱们做一下期末考试的大题吧:


已知字符a~f的出现频率分别是55、30、19、3、6、16,在此基础上构造Huffman树,并写出a~f的前辍编码,规定左孩子编码为0,右孩子编码为1。(6分)

 

现在的集合是{55,30,19,16,6,3}

先取最小的权值  

 

    9

  /    \

6       3

现在变成了 {55,30,19,16,9}继续取最小权值

              25

            /    \

          16     9

                  /    \

                 6      3

现在变成了 {55,30,19,25}

           

44

 /    \  

19   25

            /    \

         16     9

                  /    \

                6      3

现在变成了 {55,30,44}

       
74

/    \  

30    44

       /    \  

      19   25

            /    \

          16     9

                  /    \

               6       3

{55,74}

          129

          /      \

        55(a)    77

                   /    \  

             30(b)    44

                        /         \  

                       19(c)     25

                                   /        \

                                  16(f)     9

                                           /       \

                                       6(e)      3(d)

排序一下,55(a)   30(b)   19(c)   16(f)   6 (e)  3(d)

 

a:0

B:10

C:110

F:1110
e:11110
d:11111

转载于:https://www.cnblogs.com/EEEE1/p/8250727.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值