最优二叉树(霍、赫、哈夫曼树)

路    径: 由一结点到另一结点间的分支所构成。

路径长度: 路径上的分支数目。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树及其应用相关推荐

  1. 赫夫曼(Huffman)树/编码

    一 . 基本概念: 赫夫曼树:给定带权的N个叶子构成的所有二叉树中,树的带权路径长度最小的二叉树(最优二叉树) 带权路径长度:所有树叶到树根之间的路径长度与该节点上权的乘积 权:赋予节点的有意义的参数 ...

  2. 2020-10-1 //严蔚敏《数据结构》 //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码

    //严蔚敏<数据结构> //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码 //(从叶子结点到根逆向求每个字符的赫夫曼编码)以及(无栈非递归遍历赫夫曼树,求赫夫曼编码) //自学中 ...

  3. 哈夫曼 (Huffman) 树的动画演示

     哈夫曼 (Huffman) 树的动画演示: http://people.cs.pitt.edu/~kirk/cs1501/animations/Huffman.html 此网站中亦有诸多其它算法 ...

  4. 【Java数据结构】赫夫曼树

    哈弗曼树 哈弗曼树定义 哈弗曼树示例 哈弗曼树代码实现 哈弗曼树定义 给定 N 个权值作为 N 个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也称为哈 ...

  5. 高级数据结构之赫夫曼树

    思考两个问题 电报发送:二战的时候大家都知道那时候普遍会应用电报,如果让你来设计一个电报的发送编码你该如何设计呢? 电报加密后越短越好,发送快. 破解难 解码容易 换加密树也要快 可逆的 压缩算法:给 ...

  6. 【数据结构】赫夫曼树

    数据结构赫夫曼树 /*名称:赫夫曼树语言:数据结构C语言版 编译环境:VC++ 6.0日期: 2014-3-26 */#include <stdio.h> #include <lim ...

  7. 【数据结构】赫夫曼树与编码

    赫夫曼树与赫夫曼编码 前言 赫夫曼树 存储结构 初始化树 构建树 赫夫曼编码 初始化编码 构建编码 前言 (概念) 路径:从一个节点到另一个节点的分支 路径长度:从一个节点到另一个节点的分支总数 节点 ...

  8. 【数据结构】赫夫曼树与赫夫曼编码(可执行完整代码)

    赫夫曼编码对文件进行压缩与解密 理论 赫夫曼树 赫夫曼编码 应用 应用源码 运行结果截图 理论 赫夫曼树 先有赫夫曼树,才有赫夫曼编码.所以,首先简单介绍一下什么是赫夫曼树. 假设一共五个叶子节点,分 ...

  9. 数据结构之赫夫曼文件压缩解压

    一.文件压缩 具体要求:给你一个图片文件,要求对其进行无损压缩, 看看压缩效果如何. 思路:读取文件-> 得到赫夫曼编码表 -> 完成压缩 package com.ws.数据结构.树.赫夫 ...

最新文章

  1. 100以内 蝗 靓耸 6的c语言怎,C语言学习C6.ppt
  2. 九度OJ #1437 To Fill or Not to Fil
  3. CSS性能优化:可以试一试内联CSS?
  4. python 集合技巧
  5. python层次聚类法画图_原理+代码|详解层次聚类及Python实现
  6. 三种振幅调制AM、DSB、SSB
  7. 一起学Python 第1章 出发吧
  8. ssh:ssh-agent、ssh-add
  9. 2020年12月六级真题翻译(北京大兴国际机场)
  10. VB.NET + QQ文件助手实现远程控制
  11. 对啊,就是嫌你穷才分手的啊
  12. acm中的概率和期望类题目 挖坑
  13. 技术如何转产品——1+12?
  14. 简单的Windows游戏-第1部分:游戏框架
  15. Unity3D研究院之游戏开发中的人工智能AI
  16. PAT乙级 1024. 科学计数法 (C语言)
  17. 中忻嘉业电商:如何理解抖音dou+投放
  18. autohotkey --- 热键只对特定程序生效,并设置不同等级的搜索功能
  19. C300简易配置基本操作--移机+业务配置(详细!!!)
  20. 徐小平:正在死亡的交易员们

热门文章

  1. 原创 | GIS属性表转为Excel表格
  2. K8s 多节点部署流程
  3. 介绍lookup函数十大常用的用法
  4. mysql通过配置文件进行优化
  5. NFT Insider #54:BreederDAO将开启公募,游戏巨头万代南梦宫、育碧入局元宇宙
  6. python 做界面时如何使图片保持透明背景_Python matplotlib生成图片背景透明
  7. CAD关闭图层快捷键,隐藏显示的CAD图层
  8. 文本生成视频Make-A-Video,根据一句话就能一键生成视频 Meta新AI模型
  9. excel手机版_微软的新办公利器,这才是手机办公该有的亚子!
  10. 感知复合型人才的重要性!