Huffman树及其应用

原创 2016年06月01日 10:56:38
最优二叉树(赫夫曼树)
       
        路    径:由一结点到另一结点间的分支所构成。
        路径长度:路径上的分支数目。a→e的路径长度=2
        树的路径长度:从树根到每一结点的路径长度之和。树长度=10
        结点的权:一些应用中,赋予树中结点的一个有某种意义的实数。
        带权路径长度:结点到根的路径长度与结点上权的乘积。
        树的带权路径长度:树中所有叶子结点的带权路径长度之和。
        赫 夫 曼 树:带权路径长度最小的树。



Huffman树的构造
构造赫夫曼树的基本思想:

        权值大的结点用短路径,权值小的结点用长路径。

构造Huffman树的步骤(即Huffman算法):

        (1) 由给定的 n 个权值{w1, w2, …, wn},构造具有 n 棵二叉树的集合F = { T1, T2, …, Tn},其中每棵二叉树 Ti中只有一个带权为 wi的根结点,其左、右子树均为空。
        (2) 在 F 中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。             (3) 在 F 中删除这两棵树,同时将新得到的二叉树加入F中。 
        (4) 重复(2)和(3), 直到 F 只含一棵树为止。这棵树便是赫夫曼树。

构造Huffman树的步骤:
        操作要点1:对权值的合并、删除与替换 ——在权值集合{7,5,2,4}中,总是合并当前值最小的两个权

          操作要点2:按左0右1对Huffman树的所有分支编号!

        特点:每一码都不是另一码的前缀,绝不会错译! 称为前缀码
        前缀编码:指的是,任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。 
        前缀编码保证了在解码时不会有多种可能。



Huffman编码:
        利用赫夫曼树可以构造一种不等长的二进制编码,并且构造所得的赫夫曼编码是一种最优前缀编码,即使所传电文的总长度最短。
赫夫曼编码的基本思想是:
        概率大的字符用短码,概率小的用长码。由于赫夫曼树的WPL最小,说明编码所需要的比特数最少。这种编码已广泛应用于网络通信中。 


例如:
        假设用于通信的电文仅由8个字母{ a, b, c, d, e, f, g, h }  构成,它们在电文中出现的概率分别为{ 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10 },试为这8个字母设计哈夫曼编码。如果用0~7的二进制编码方案又如何?
解:
        先将概率放大100倍,以方便构造哈夫曼树。权值集合 w={ 7, 19, 2, 6, 32, 3, 21, 10 }, 按哈夫曼树构造规则(合并、删除、替换),可得到哈夫曼树。







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

【数据结构与算法】Huffman树&&Huffman编码(附完整源码)

赫夫曼树(Huffman Tree),又称最优二叉树,是一类带权路径长度最短的树。假设有n个权值{w1,w2,...,wn},如果构造一棵有n个叶子节点的二叉树,而这n个叶子节点的权值是{w1,w2,...
  • mmc_maodun
  • mmc_maodun
  • 2014年02月15日 00:27
  • 23608

哈夫曼树

一、哈夫曼树的概念和定义   什么是哈夫曼树? 让我们先举一个例子。 判定树:         在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例...
  • shuangde800
  • shuangde800
  • 2012年03月11日 13:08
  • 89950

哈夫曼树

介绍 哈夫曼树,英文名 Huffman Tree, 又称赫夫曼树或最优二叉树。其主要用途是在于解决哈夫曼编码。哈夫曼编码则目的是在字节长度一定下,尽可能传输较多的信息。 这也就是要让出现在明文中次数较...
  • qq_19762007
  • qq_19762007
  • 2016年02月21日 17:03
  • 3755

数据结构和算法——Huffman树和Huffman编码

Huffman树是一种特殊结构的二叉树,由Huffman树设计的二进制前缀编码,也称为Huffman编码在通信领域有着广泛的应用。在word2vec模型中,在构建层次Softmax的过程中,也使用到了...
  • google19890102
  • google19890102
  • 2017年02月04日 15:43
  • 1824

哈夫曼树的基本构建与操作

看到的讲解huffman树的一篇比较好懂的博客,唯一不足的地方就是代码里面使用Malloc时没有强制类型转换。。。。 出处:http://blog.csdn.net/wtfmonking/articl...
  • Move_now
  • Move_now
  • 2016年11月29日 20:02
  • 12494

【小项目】用Huffman树实现文件压缩并解压

一、前言         如果你学习数据结构,就一定会学到Huffman树,而Huffman编码实际上上就是zip压缩的核心部分,所以,如果已经学习了Huffman树,为何不尝试写一个压缩程序出来呢?...
  • pointer_y
  • pointer_y
  • 2016年11月09日 20:55
  • 3944

霍夫曼树和霍夫曼编码原理

一、哈夫曼树的概念和定义   什么是哈夫曼树? 让我们先举一个例子。 判定树:         在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例...
  • sddxqlrjxr
  • sddxqlrjxr
  • 2016年04月10日 20:20
  • 10165

哈夫曼树

树形结构的用处有很多,例如排序时利用树的结构保存节点大小关系,如堆、二叉树等排序;查找、修改节点时利用树的平衡性来简化操作,如AVL树、红黑树,此处利用树的另一项特性:优化判断。 定义 哈夫曼树的学术...
  • wo16fafafa
  • wo16fafafa
  • 2016年09月03日 00:30
  • 2046

哈夫曼树最优性的证明(思考良久)

哈夫曼树为什么就是最优树??怎么去证明!!?? 证明围绕着两个东西(一定要先看,而且要能够认同): 1. 现在还不知道树长什么模样,但不管怎样,可以确定:最小的两个权值是在整棵树的最下段的两片叶子...
  • qq_25847123
  • qq_25847123
  • 2015年10月09日 09:22
  • 3392

huffman编码——原理与实现

哈夫曼算法原理 Wikipedia上面说的很清楚了,这里我就不再赘述,直接贴过来了。 1952年, David A. Huffman提出了一个不同的算法,这个算法可以为任何的可能性...
  • abcjennifer
  • abcjennifer
  • 2012年09月26日 14:51
  • 69385
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Huffman树及其应用
举报原因:
原因补充:

(最多只允许输入30个字)