哈夫曼树与哈夫曼编码及等长编码

2023-11-04

哈夫曼树的构造:就是将给定的数据中选择最小的两个权值进行合并,然后重复该操作,构造出一个二叉树。使其带权路径长度WPL最小的二叉树称为哈夫曼树或最优二叉树。

例如:给定几个数值:0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.01

可以将其扩大一百倍,以方便计算,不会影响哈夫曼树的构造

W={7, 19, 2, 6, 32, 3, 21, 10}

4acf448c4f5045c390cb922156a47cd1.png

选择最小的2,3进行合并为5,5 和 6 为最小的再进行合并为 11 , 重复该操作可以得到该哈夫曼树。

哈夫曼编码:

在进行数据压缩的时候,为了使压缩后的数据文件尽可能短,可采用不定长编码。其基本思想是:为出现次数较多的字符编以较短的编码。为确保对数据文件进行有效的压缩和对压缩文件进行正确的解码,可以利用哈夫曼树来设计二进制编码。

编码的概念:

(1)前缀编码:如果在一个编码方案中,任何一个编码都不是其他任何编码的前缀(最左子串),则称编码是前缀编码。00,001这个就不是前缀编码。其实就是通过这些编码准确得出数据信息,不会混淆。

(2)哈夫曼编码:对一棵具有n个叶子的哈夫曼树,若对树中的每个左分支赋予0,右分支赋予1,则从根到每个叶子的路径上,各个支的赋值分别构成一个二进制,该二进制就称为哈夫曼编码

哈夫曼编码性质:

(1)哈夫曼编码是前缀编码

(2)哈夫曼编码是最优前缀编码

字母编号 出现频率 哈夫曼编码 等长编码
1 0.07 1100 000
2 0.19 00 001
3 0.02 11110 010
4 0.06 1110 011
5 0.32 10 100
6 0.03 11111 101
7 0.21 01 110
8 0.10 1101 111

由上面的例子得出该表

如何得出这个哈夫曼编码?以0.07扩大一百倍之后是7为例子讲解:

从叶子结点到根节点:7 ——> 17是左分支,所以赋予0

                                  17 ——> 28是左分支,所以赋予0

                                  28 ——> 60是右分支,所以赋予1

                                  60 ——> 100是右分支,所以赋予1

哈夫曼编码是从根节点到叶子结点:所以0.07的哈夫曼编码是1100.

等长编码就相当于一个从根节点到叶子节点的路径为K的满二叉树,上面列表就是通过一个从根节点到叶子节点的路径为3的满二叉树得来的等长编码,方法和得到哈夫曼编码一样。

9c3c71f7d6784fe9b5f2a723472007f4.png

以0.07扩大一百倍后为7来讲解以下;

 从叶子结点到根节点: 7——> 26 是左分支,所以赋予0

                                    26 ——>34 是左分支,所以赋予0

                                    34 ——>100是左分支,所以赋予0

等长编码是从根节点到叶子结点,所以等长编码是000

在对多个有序表进行两两合并时,若表长不同,则最坏的情况下总的比较次数依赖于表的合并次序(归并排序),可以借助哈夫曼树的构造思想,依次选择最短的两个表进行合并,这样可以获得最坏的情况下最佳的合并效率 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈夫曼树与哈夫曼编码及等长编码 的相关文章

随机推荐

  • mongodb导入数据库报错:command listCollections requires authentication

    今天迁移mongodb数据 需要将数据导入到一个新的mongodb中去 把环境搭建好之后 执行 mongorestore dir home backdata 想要导入数据 却报错了 错误信息如下 command listCollection
  • 第50步 深度学习图像识别:Data-efficient Image Transformers建模(Pytorch)

    基于WIN10的64位系统演示 一 写在前面 1 Data efficient Image Transformers Data efficient Image Transformers DeiT 是一种用于图像分类的新型模型 由Facebo
  • Minio(储桶bucket)上传和下载文件【Java】(图片转流、base64)

    此处先将图片下载到本地 再进行转换 MinIO是一个对象存储服务 非常轻量 Java Api 依赖
  • Springboot启动扩展点超详细总结,再也不怕面试官问了

    1 背景 Spring的核心思想就是容器 当容器refresh的时候 外部看上去风平浪静 其实内部则是一片惊涛骇浪 汪洋一片 Springboot更是封装了Spring 遵循约定大于配置 加上自动装配的机制 很多时候我们只要引用了一个依赖
  • NoSQL数据库概述

    简介 本文首先解释了NoSQL的出现的原因 介绍了NoSQL数据库所依据的理论和原则 然后分别介绍了四种NoSQL数据库的类型 以及其代表产品 并讨论了这四种类型的NoSQL的特点以及适用场景 需要NoSQL的理由 NoSQL数据库 看起来
  • Qt程序设置不重复打开该程序

    Qt程序设置不重复打开该程序 文章目录 Qt程序设置不重复打开该程序 对于已经打开的Qt桌面程序 我们希望用户再次双击桌面的快捷方式时 程序可以自动激活到其他所有程序的最前面 而不是重新打开一次程序 此时我们采用QSharedMemory方
  • 【图像处理】【去模糊】图像去模糊之初探--Single Image Motion Deblurring

    原文 原文地址 曾经很长一段时间 对图像去模糊都有一种偏见 认为这是一个灌水的领域 没有什么实用价值 要到这样的文章 不管是多高的档次 直接pass 最近在调研最近几年的关于Computational Photography的一些研究热点时
  • 莫言用 GPT 写颁奖辞,那如果他自己写会是什么效果呢?

    在 收获 杂志 65 周年庆典上 莫言在为余华颁奖时表示 余华是自己的好朋友 但给他的颁奖词写了好几天也想不出来 后来找了 ChatGPT 帮忙写 最后 莫言让 ChatGPT 写了一篇莎士比亚风格 1000 多字的颁奖词 输入了关键词 活
  • 数据仓库_缓慢渐变维_拉链表(全揭秘)

    这篇文章我们主要讲解下以下几个点 什么是拉链表 用于什么样的场景 拉链表的示例 如何获取某一天的历史状态 如何在使用维度拉链表并使用代理键的前提下 构建含维度代理键的事实表 1 什么是拉链表 用于什么样的场景 当维度数据发生变化时 将旧数据
  • Hutool:一行代码搞定数据脱敏

    1 什么是数据脱敏 1 1 数据脱敏的定义 数据脱敏百度百科中是这样定义的 数据脱敏 指对某些敏感信息通过脱敏规则进行数据的变形 实现敏感隐私数据的可靠保护 这样就可以在开发 测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集
  • 枭龙智能眼镜 XLOONG X100 Glass拆解

    这里只拆到主板过 首先需要对带Glass的可拆卸配件进行壳体加热 主机外壳有密封胶 吹风机对主机外壳的接缝处进行加热 可以从下侧的点开始用撬棒拆 拆开一个角之后沿着边慢慢打开 如果还是有阻尼感打不开 用吹风机加热再慢慢撬开 但是注意 打开幅
  • MySQL备份与恢复

    目录 数据库备份的分类 数据备份的重要性 数据库备份的分类 常见的备份方法 MySQL完全备份与恢复 MySQL完全备份介绍 MySQL完全备份的优缺点 数据库完全备份分类 完全备份操作 物理冷备份 逻辑备份 mysqldump的使用 My
  • python3.6打包成exe可执行文件,已解决方案

    将python程序打包成exe可执行文件有多种方法 这里讲一种最简单最常用的方法 只需要使用pyinstaller命令即可 一 环境 Windows 7或10 x64 Python 3 6 1 二 需要包 pyinstaller 3 3 p
  • JSON.stringify && JSON.parse

    原生JS 通过 ajax请求数据的时候控制台报500的错误 在这里记录一下 不喜勿喷哈 let submit document getElementsByClassName submit 0 submit addEventListener
  • idea突然打不开【解决方法整理总结】

    今天突发情况打不开 下面分情况讨论 欢迎大家给出不同的错误版本 狗头 一直这样 每天一遍qwq 解决方案 可以先找到idea安装根目录bin下 选中idea bat右键编辑 或者使用txt打开在idea bat最后一行添加 pause 打印
  • 解决pythoncharm中安装numpy无法调用的问题

    1 提示ImportError numpy core multiarray failed to import 可能问题 numpy的版本不合适 解决方法 1 卸载安装的numpy安装新的版本 pip uninstall numpy pip
  • 稀疏奖励及模仿学习(DataWhale组队学习笔记)

    稀疏奖励 在用强化学习解决现实问题时 我们对学习目标设置相应的奖励 但在庞大的状态空间中 智能体想要通过随机试错来获取奖励的概率是极低的 不获得奖励就没办法学习 我们将这种情况称作稀疏奖励 针对稀疏奖励问题 我们介绍以下几种解决方案 1 R
  • React脚手架

    React脚手架 xxx脚手架 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置 语法检查 jsx编译 devServer 下载好了所有相关的依赖 可以直接运行一个简单效果 react提供了一个用于创建react项目的
  • 传奇服务器开启生肖系统,英雄合击十二生肖商业版[带补丁]

    英雄合击十二生肖商业版 带补丁 新增功能 最新梦幻十二生肖 新模型 新样式 新一年的开始 多种表情 更强的脚本功能 长久寿命 返回不败传奇时代 加入新地图 精灵城 机械城 机械城下 怪物等级显示 支持原有 卧龙 英雄 合击 新技能 护体盾
  • 哈夫曼树与哈夫曼编码及等长编码

    哈夫曼树的构造 就是将给定的数据中选择最小的两个权值进行合并 然后重复该操作 构造出一个二叉树 使其带权路径长度WPL最小的二叉树称为哈夫曼树或最优二叉树 例如 给定几个数值 0 07 0 19 0 02 0 06 0 32 0 03 0