• 解决哈夫曼编码树问题


     哈夫曼编码树解码概念
    (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

  • 相关阅读:
    你好,世界!
    zabbix监控系统(四)创建监控项
    zabbix监控系统(三)监控主机
    zabbix监控系统(二)登录并配置用户
    zabbix监控系统(一)zabbix安装
    python介绍
    Cohen-Sutherland裁剪算法
    eclipse安装openGL方法(完整版)
    java第一课:安装环境变量和用记事本实现Hello World
    实验二
  • 原文地址:https://www.cnblogs.com/EEEE1/p/8250727.html
Copyright © 2020-2023  润新知