[转载]Huffman树

1. 定义

huffman编码是一种可变长编码方式,依据字符在需要编码文件中出现的概率提供对字符的唯一编码,并且保证了可变编码的平均编码最短,被称为最优二叉树,有时又称为最佳编码。

2.概念

  1. 树的路径长度:根节点到每一个节点的路径长度为 i
  2. 节点的带权路径长度:节点到根节点之间的路径长度 i 与节点权重 w 的乘积
  3. 树的带权路径长度:所有节点的带权路径长度之和

若干个节点,每一个节点的权重为w1,w2,w3,..,Wn,这n个节点为叶子节点,构造一个有n个叶子节点的二叉树,具有最短的带权路径长度的二叉树为huffman树。

  • 图3 的带权路径长度最短,就是Huffman树

3. Huffman编码

  • 编码结果: a:0 ,b:10, c:110,d:111
  • 注意 a、b、c、d都必须是叶子节点

4. 如何构建Huffman数以及Huffman编码

构造huffman树的哈夫曼算法如下:
(1)n节点的权值{w1、w2、·····,wn}构成n棵二叉树集合F={T1,T2,···,Tn},每棵二叉树Ti只有一个带权为Wi的根节点,左右孩子均空。
(2)在F中选取两棵根节点权值最小的作为树的左右孩子构造一棵新的二叉树,且置根节点的权值为左右孩子权值之和,在F中删除这两棵树,新二叉树之于F中
(3)重复(2),直到F中只有一棵树为止,这棵树就是huffman树。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,934评论 1 31
  • 定义指针变量,如果不赋给它地址,系统会随机给它分配一个地址。 C++标准库 C++ Standard Librar...
    纵我不往矣阅读 2,361评论 0 1
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 11,082评论 0 19
  • 1.树(Tree): 树是 n(n>=0) 个结点的有限集。当 n=0 时称为空树。在任意一颗非空树中:有且仅有一...
    ql2012jz阅读 4,738评论 0 3
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,610评论 0 12