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,...

Huffman Tree 的构建和Huffman Code的实现

编译环境IDE:  codeblocksCompiler: GNU GCC /*************************************************************...

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

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

哈夫曼树

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

dot实现HuffmanTree动态可视化

代码: #include #include #include #include #include #include #include #include #include #include using...
  • Geecky
  • Geecky
  • 2016年07月18日 15:55
  • 499

Huffman树及编码的实现

Huffman树及编码的实现
  • Tommenx
  • Tommenx
  • 2017年04月11日 20:09
  • 617

构造最优二叉树-赫夫曼(Huffman)树算法

http://blog.163.com/zhoumhan_0351/blog/static/3995422720098275836215/ 构造最优二叉树-赫夫曼(Huffman)树算法   ...

[C/C++] 构造最优二叉树-赫夫曼(哈夫曼、Huffman)树算法实现

一、基本概念 1、赫夫曼(Huffman)树又称最优二叉树或最优搜索树,是一种带权路径长度最短的二叉树。在许多应用中,常常赋给树中结点一个有某种意义的实数,称此实数为该结点的权。从树根结点到该结点之...

Huffman编码树

哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而...
  • woaic__
  • woaic__
  • 2015年03月20日 21:23
  • 952

树结构(四) - 哈夫曼树的原理与实现

一、哈夫曼树的介绍 Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。 定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。 这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Huffman树及其应用
举报原因:
原因补充:

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