哈夫曼树概述

作者: 盗梦者_56f2 | 来源:发表于2019-02-26 08:59 被阅读2次

术语

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

哈夫曼树的定义

给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1L1+W2L2+W3L3+...+WnLn),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明霍夫曼树的WPL是最小的。
图a和图b的带权路径长度分别为:
图a: WPL=52+72+22+132=54
图b: WPL=53+23+72+131=48
可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树(也称为最优二叉树)。

构造哈夫曼树

假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:

  1. 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
  2. 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
  3. 从森林中删除选取的两棵树,并将新树加入森林;
  4. 重复2、3步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

例如,给定 4 个权值为 1、3、5、7 的节点构造一棵哈夫曼树,其构造方式如下:


哈夫曼树构造过程

哈夫曼编码

利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子节点都有一条路径,对路径上的各分支约定指向左子树的分支表示”0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为各个叶子节点对应的字符编码,即是哈夫曼编码。
就拿下图例子来说:
A,B,C,D对应的哈夫曼编码分别为:111,10,110,0


哈夫曼编码

代码实现

。。。

相关文章

  • 哈夫曼树概述

    术语 路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路...

  • 《恋上数据结构与算法一》笔记(十八)哈夫曼树

    目录 哈夫曼编码(Huffman Coding) 哈夫曼树 构建哈夫曼树 构建哈夫曼编码 一 哈夫曼编码(Huff...

  • 《数据结构与算法》总结(七)哈夫曼树

    目录 哈夫曼编码(Huffman Coding) 哈夫曼树 构建哈夫曼树 构建哈夫曼编码 一 哈夫曼编码(Huff...

  • A simple test

    哈夫曼编码 此代码用于生成哈夫曼树并且获取哈夫曼编码

  • 2018-11-27

    今天看了哈夫曼构造过程,了解如何构造哈夫曼树。

  • 构造哈夫曼树和对每个字符进行编码

    必备知识 哈夫曼树也称为最优二叉树。 哈夫曼树并不唯一,但带权路径长度一定是相同的。 哈夫曼树中,左子树值必须小于...

  • 题型

    树 二叉树相关计算二叉树的三种遍历序列 前/后序+中序序列构造树 哈夫曼树 哈夫曼树的构造哈夫曼编码带权路径长度压...

  • 哈夫曼编码

    实验目的: (1) 掌握二叉树的定义; (2) 掌握哈夫曼树和哈夫曼编码算法的实现。 实验内容: 实现一个哈夫曼编...

  • 哈夫曼树,哈夫曼编码

  • 哈夫曼树&哈夫曼编码

    引入 哈夫曼、赫夫曼、霍夫曼都说的是——Huffman哈夫曼树和哈夫曼编码到底解决啥问题呢?先看两个常经常用来解释...

网友评论

    本文标题:哈夫曼树概述

    本文链接:https://www.haomeiwen.com/subject/jvyoyqtx.html