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树的应用: 1、先选择一篇文章 2、然后统计字符个数 3、对个数不为0字符的进行编码 4、输出码文 5、进行译码 上机代码: /**********...

哈夫曼树及其应用

1、哈夫曼树的基本概念 ---- 哈夫曼(Huffman)树又称作最优二叉树,它是n个带权叶子结点构成的所有二叉树中,带权路径长度最小的二叉树。 ---- “路径”就是从树中的一个结点到另一个结点之...

Huffman编码(二叉树的应用)

对文件进行Huffman编码,以及对已编码文件进行解码,为简单起见,可以假设文件是存放在一个字符向量

类与对象

在面向对象的编程语言中,类是对对象的抽象,在类中可以定义对象的属性和方法的描述;对象是类的实例,类只有被实例化后才能被使用。定义类  在PHP中,使用关键字class加类名的方式定义类,然后用大括号包...

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

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

Huffman Tree 的构建和Huffman Code的实现

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

自己动手写word2vec (三):构建Huffman树

这一部分将解释Huffman树的构造方法,并说明了如何根据Huffman树来产生对应的二进制编码。这部分的代码放在HuffmanTree.py中Huffman树的构造Huffman树的构造方法与Huf...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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