zoukankan      html  css  js  c++  java
  • 最优二叉树(哈夫曼树)知识点

    路径:在一棵树中从一个结点往下到孩子或孙子结点之间的通路

    结点的路径长度:从根节点到该节点的路径上分支的数目

    树的路径长度:树中每个结点的路径长度之和

    结点的权:给树中的结点赋予一个某种含义的值,则该值为该节点的权

    结点的带权路径长度:结点的路径长度乘以结点的权

    树的带权路径长度(WPL:树中所有叶子结点的带权路径长度 (Weight Path Length)

     

    最优二叉树(哈夫曼树):带权路径长度最小的二叉树

     

    构造哈夫曼树:

         给定n个权值{w1,w2,…wn},则构造出的哈夫曼树有n个叶子结点,构造过程如下:

    1.       w1,w2…wn按从小到大排序,并将他们看做n棵只有一个结点的树组成的森林;

    2.       选出两个根节点权值最小的树合并,作为新树的左右子树,新树的根节点权值是左右子树根节点权值之和

    3.       从森林中删除选取的两棵树,将新树加入森林

    4.       重复2,3,直到只剩一棵树,所得即为最优二叉树

    实例如下:给定权值{5,6,2,7,9}构造哈夫曼树

           解:(1) 排序后为w={2,5,6,7,9}

      

    取出2,5          w={6,7,7,9}

     

     取出6,7    w={7,9,13}

     

    取出7,9         w={13,16}

    取出13,16

     

      上面的哈夫曼树的wpl=6X2+7X2+2X3+5X3+9X2=65

     

    哈夫曼树在编码中的应用:    

    在通讯中,经常需要将文本转换成二进制串,即编码。为了使电文代码尽可能的短,需要另经常使用的字符采用短的编码,使用频率小的字符采用长的编码。同时,一个字符的编码不能包含另一个字符的编码,例如A00B就不能是001,使用哈夫曼树就可以很好的实现 ,

    例如A,B,C,D,E的频率分别是6,7,2,5,9 对应的哈夫曼树为:

        

    另左子树的路径为0,右子树路径为1

    A:00    B:01  C:100  D:101  E:11

     

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    VS缓冲区溢出,未对变量进行检查
    Mutex与Event控制互斥事件的使用详解
    error LNK2019: 无法解析的外部符号
    [转] 兼容IE和Firefox的设为首页和收藏的Javascript代码
    [转]超时时间以到,但尚未从池中获取连接
    Datalist的嵌套使用
    由服务器端向客户端输出脚本
    几个国外的XHTML模板站,DIV+CSS模板下载(转)
    gridview隐藏某一列
    [转]简单谈基于SQL SERVER 分页存储过程的演进
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931857.html
Copyright © 2011-2022 走看看