霍夫曼树(最优二叉树)简介

来源:互联网 发布:武警待遇 知乎 编辑:程序博客网 时间:2024/06/08 07:59

一、霍夫曼编码

      说到霍夫曼树,就不得不提霍夫曼编码(Huffman Coding)。霍夫曼编码是可变字长编码(VLC)的一种。David.A.Huffman于1952年提出该编码方法,即完全依据字符出现概率来构造异字头的平均长度最短的码字,亦称之为最佳编码。

      在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为{8,4,5,3,1,1}。现要求为这些字母设计编码。要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制,可分别用000、001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码。显然编码的长度取决报文中不同字符的个数。若报文中可能出现26个不同字符,则固定编码长度为5。然而,传送报文时总是希望总长度尽可能短。

      在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、Z,自然会想到设计编码时,如果能让出现频率高的字符的编码长度减少,频率低的字符编码长度 长于 频率高的。这样整个信息的编码长度会减少,并且能区分出不同的字符。

      为了实现这种更高效的编码方式,就需要利用一个二叉树的结构来进行辅助编码,这种二叉树即为霍夫曼树,也称作最优二叉树。来实现一个字符的编码不是另一个字符编码的前缀。


二、霍夫曼树的定义与算法描述

         在说明霍夫曼树之前,需要介绍几个术语。

      1、路径和路径长度
      在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。
      2、结点的权及带权路径长度
      若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积
      3、树的带权路径长度
      树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。(Weighted Path Length of Tree)


      所谓赫夫曼树,就是带权路径长度之和WPL最小的那个二叉树。(因此也叫作最优二叉树)

    

     一般来说,用n(n>0)个带权值的叶子来构造二叉树,限定二叉树中除了这n个叶子外只能出现度为2的结点


     算法描述

     

      

     

      例如


三、霍夫曼编码的实现

http://blog.csdn.net/feynman1999/article/details/71178357

     


1 0
原创粉丝点击