数据结构入门----赫夫曼Huffman树及其应用
最优二叉树(霍、赫、哈夫曼树)
路 径: 由一结点到另一结点间的分支所构成。
路径长度: 路径上的分支数目。a→e的路径长度=2
树的路径长度: 从树根到每一结点的路径长度之和。树长度=10
带权路径长度: 结点到根的路径长度与结点上权的乘积。
树的带权路径长度: 树中所有叶子结点的带权路径长度之和。
哈 夫 曼 树:带权路径长度最小的二叉树。
Huffman树简介
树的带权路径长度Weighted Path Length
哈夫曼树则是:WPL 最小的二叉树。
有n个权值分别为w1、w2…、wn,构造一颗有n个叶子结点的二叉树,每个叶子结点带的权值为wi,其中WPL最小的二叉树叫做最优二叉树
哈夫曼树的特点:
1. 权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。
2. 只有度为0(叶子结点)和度为2(分支结点)的结点,不存在度为1的结点.
构造哈夫曼树的基本思想:
权值大的结点用短路径,权值小的结点用长路径。
构造Huffman树的步骤(即Huffman算法):
(1) 由给定的 n 个权值{w0, w1, w2, …, wn-1},构造具有 n 棵扩充二叉树的森林F = { T0, T1, T2, …, Tn-1 },其中每一棵扩充二叉树 Ti 只有一个带有权值 wi 的根结点,其左、右子树均为空。
(2) 重复以下步骤, 直到 F 中仅剩下一棵树为止:
① 在 F 中选取两棵根结点的权值最小的扩充二叉树, 做为左、右子树构造一棵新的二叉树。置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。
② 在 F 中删去这两棵二叉树。
③ 把新的二叉树加入 F。
操作要点: 合并、删除与替换
哈夫曼树的应用:哈夫曼编码
设有4个字符d,i,a,n,出现的频度分别为7,5,2, 4,怎样编码才能使它们组成的报文在网络中传得最快?
等长编码,例如用二进制编码来实现。 取 d=00,i=01,a=10,n=11
不等长编码,例如用哈夫曼编码来实现。 取 d=0; i=10, a=110, n=111
最快的编码是非等长的Huffman码!
实现Huffman编码先要构造Huffman树!
构造Huffman树的步骤:
操作要点1:对权值的合并、删除与替换 ——在权值集合{7,5,2,4}中,总是合并当前值最小的两个权
注:方框表示外结点(叶子,字符对应的权值), 圆框表示内结点(合并后的权值)。
操作要点2:按左0右1对Huffman树的所有分支编号!
将 Huffman树 与 Huffman编码 挂钩。
Huffman编码结果:d=0, i=10, a=110, n=111,WPL=1bit×7+2bit×5+3bit(2+4)=35
特点:每一码都不是另一码的前缀,绝不会错译! 称为前缀码
霍夫曼编码的基本思想是:概率大的字符用短码,概率小的用长码。由于霍夫曼树的WPL最小,说明编码所需要的比特数最少。这种编码已广泛应用于网络通信中。
对应的哈夫曼编码(左0右1):
Huffman码WPL=2(0.19+0.32+0.21) + 4(0.07+0.06+0.10) +5(0.02+0.03) =1.44+0.92+0.25=2.61
二进制码WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3
另一种结果表示:
数据结构入门----赫夫曼Huffman树及其应用相关推荐
- 赫夫曼(Huffman)树/编码
一 . 基本概念: 赫夫曼树:给定带权的N个叶子构成的所有二叉树中,树的带权路径长度最小的二叉树(最优二叉树) 带权路径长度:所有树叶到树根之间的路径长度与该节点上权的乘积 权:赋予节点的有意义的参数 ...
- 2020-10-1 //严蔚敏《数据结构》 //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码
//严蔚敏<数据结构> //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码 //(从叶子结点到根逆向求每个字符的赫夫曼编码)以及(无栈非递归遍历赫夫曼树,求赫夫曼编码) //自学中 ...
- 哈夫曼 (Huffman) 树的动画演示
哈夫曼 (Huffman) 树的动画演示: http://people.cs.pitt.edu/~kirk/cs1501/animations/Huffman.html 此网站中亦有诸多其它算法 ...
- 【Java数据结构】赫夫曼树
哈弗曼树 哈弗曼树定义 哈弗曼树示例 哈弗曼树代码实现 哈弗曼树定义 给定 N 个权值作为 N 个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也称为哈 ...
- 高级数据结构之赫夫曼树
思考两个问题 电报发送:二战的时候大家都知道那时候普遍会应用电报,如果让你来设计一个电报的发送编码你该如何设计呢? 电报加密后越短越好,发送快. 破解难 解码容易 换加密树也要快 可逆的 压缩算法:给 ...
- 【数据结构】赫夫曼树
数据结构赫夫曼树 /*名称:赫夫曼树语言:数据结构C语言版 编译环境:VC++ 6.0日期: 2014-3-26 */#include <stdio.h> #include <lim ...
- 【数据结构】赫夫曼树与编码
赫夫曼树与赫夫曼编码 前言 赫夫曼树 存储结构 初始化树 构建树 赫夫曼编码 初始化编码 构建编码 前言 (概念) 路径:从一个节点到另一个节点的分支 路径长度:从一个节点到另一个节点的分支总数 节点 ...
- 【数据结构】赫夫曼树与赫夫曼编码(可执行完整代码)
赫夫曼编码对文件进行压缩与解密 理论 赫夫曼树 赫夫曼编码 应用 应用源码 运行结果截图 理论 赫夫曼树 先有赫夫曼树,才有赫夫曼编码.所以,首先简单介绍一下什么是赫夫曼树. 假设一共五个叶子节点,分 ...
- 数据结构之赫夫曼文件压缩解压
一.文件压缩 具体要求:给你一个图片文件,要求对其进行无损压缩, 看看压缩效果如何. 思路:读取文件-> 得到赫夫曼编码表 -> 完成压缩 package com.ws.数据结构.树.赫夫 ...
最新文章
- 100以内 蝗 靓耸 6的c语言怎,C语言学习C6.ppt
- 九度OJ #1437 To Fill or Not to Fil
- CSS性能优化:可以试一试内联CSS?
- python 集合技巧
- python层次聚类法画图_原理+代码|详解层次聚类及Python实现
- 三种振幅调制AM、DSB、SSB
- 一起学Python 第1章 出发吧
- ssh:ssh-agent、ssh-add
- 2020年12月六级真题翻译(北京大兴国际机场)
- VB.NET + QQ文件助手实现远程控制
- 对啊,就是嫌你穷才分手的啊
- acm中的概率和期望类题目 挖坑
- 技术如何转产品——1+12?
- 简单的Windows游戏-第1部分:游戏框架
- Unity3D研究院之游戏开发中的人工智能AI
- PAT乙级 1024. 科学计数法 (C语言)
- 中忻嘉业电商:如何理解抖音dou+投放
- autohotkey --- 热键只对特定程序生效,并设置不同等级的搜索功能
- C300简易配置基本操作--移机+业务配置(详细!!!)
- 徐小平:正在死亡的交易员们