三种编码方式(费诺曼编码,霍夫曼编码,哈夫曼树编码)的简单解释和介绍

一.

费诺曼(Fano)编码是一种前缀编码,其基本原理是将出现频率较高的符号用短的编码表示,而出现频率较低的符号则用长的编码表示。通过这种方式进行编码,可以达到更好的压缩效果。

费诺曼编码的具体过程如下:

  1. 将要编码的符号按照出现频率从高到低排序;
  2. 将所有符号分成两组,使得每组中包含的符号的出现频率之和相近(或者完全相等);
  3. 对每个组进行递归子编码,为每个符号添加一个0或1表示它属于哪个组;
  4. 合并所有的编码,并加上每个符号所对应的标记。

二.

霍夫曼(Huffman)编码是一种经典的前缀编码技术,通常用于数据压缩领域。它的基本思想是对不同符号的出现频率进行统计,然后根据不同符号出现的概率来构造不同长度的编码,以达到信息的最优压缩。

霍夫曼编码具体的过程如下:

  1. 给定一个要编码的消息,统计其中每个符号的出现频率;
  2. 将这些符号按照出现频率从低到高排序;
  3. 将出现频率最小的两个符号合并成一个新的节点,该节点的权值为两个符号的权值之和;
  4. 在剩下的符号中重新选择出现频率最小的两个相邻节点,并合并成一个新的节点,直到所有节点都被合并成一个根节点;
  5. 对于左子树,或者说选择编码时向左转的子节点,标志位设为0;而对于右子树,或者说选择编码时向右转的子节点,标志位设为1;
  6. 根据上述规则生成每个符号的霍夫曼编码,为了避免编码冲突,保证任意一个编码序列不是另一个编码序列的前缀;
  7. 将原始消息通过使用霍夫曼编码表进行编码并压缩,压缩后的数据通常比原数据短,从而实现有效的数据压缩。

三.

哈夫曼树是一种被压缩数据的编码方法,根据哈夫曼树的定义,当一条边向左分支走时,我们可以将其用二进制0表示;当一条边向右分支走时,我们可以将其用二进制1表示。因此,哈夫曼树的存储可以使用0表示左分支,使用1表示右分支。

哈夫曼树编码的具体过程如下:

  1. 统计字符集中每个字符出现的频率,并将它们作为叶子节点加入到一个森林中;
  2. 选取两个频率最小的节点合并成一个新的节点,该新节点的权值为两个节点的权值之和。此时这两个节点在森林中被移除,同时将新生成的节点插入到森林中;
  3. 重复第二步操作,直到森林中只剩下一个节点,即为哈夫曼树的根节点;
  4. 对于哈夫曼树中的每个叶子节点,定义其编码为从根节点到该叶子节点所经过的路径上所有左转弯所组成的二进制数字(或者所有右转弯组成的数字)。例如:从根节点到叶子节点A依次经过了3个左转弯,则叶子节点A的编码为"000"。

费诺曼编码

 霍夫曼编码

 哈夫曼树编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26814.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个小时入门 Android Compose 动画

0. 前言 前段时间对于Android中的Compose动画做了系统性的学习,相关文章发布在 Compose 动画 专栏里。系统性学完Compose动画后,又对此做了系统性的回顾,抽取其比较重要的部分,希望能帮助大家快速入门Compose动画,所…

ChatGPT新突破:打造自己的智能机器人控制系统

💖 作者简介:大家好,我是Zeeland,全栈领域优质创作者。📝 CSDN主页:Zeeland🔥📣 我的博客:Zeeland📚 Github主页: Undertone0809 (Zeeland) (github.com)&…

【论文速览】根据人脑fMRI信号重建图像 Image Reconstruction from human brain activity

文章目录 前言文章一研究背景主要方法部分实验结果总结与思考参考资料 文章二研究背景主要方法部分实验结果总结与思考 前言 人类的视觉神经系统对于真实世界的视觉刺激有着非凡的感知与理解能力,比如我们能够准确地识别物体距离和三维几何关系等,这是当…

三维数字沙盘交互大数据可视化GIS地理信息系统第十课

三维电子沙盘交互无人机倾斜摄影大数据可视化GIS地理信息系统第十课 设置system.ini 如下内容 Server122.112.229.220 userGisTest Passwordchinamtouch.com 该数据库中只提供 成都市火车南站附近的数据请注意,104.0648,30.61658 在SDK中自带了一个自定义的基础面…

pycharm和virtualBox虚拟机的安装(包括本地环境和远程环境配置)

目录 一、安装时需要的软件二、安装virtualBox三、安装pycharm四、创建pycharm本地环境五、创建pycharm远程环境 一、安装时需要的软件 Pycharm,jetbrains-agent-latest破解包(破解pycharm);镜像文件ubuntu20,虚拟机virtualBox …

Zellij – 颜值爆表,比tmux、screen更好用的多窗口终端

如果你曾经使用过多窗口终端,如tmux、screen,那么你可能对Zellij上手会更快。下面将介绍这个惊艳出众的多窗口终端利器。 一、Zellij 特点 Zellij最大的特点是支持插件,与WebAssembly编译兼容。与screen和tmux相比,Zellij是以细…

Linux 之Python 定制篇-APT 软件管理和远程登录

Linux 之Python 定制篇-APT 软件管理和远程登录 apt 介绍 apt 是Advanced Packaging Tool 的简称,是一款安装包管理工具。在Ubuntu 下,我们可以使用apt 命令进行软件包的安装、删除、清理等,类似于Windows 中的软件管理工具。 unbuntu 软件…

LVS-DR负载群集的优势和部署实例(我们都会在各自喜欢的事情里变得可爱)

文章目录 一、DR模式数据包流向分析二、DR模式的特点三、DR模式中需要解决的问题问题1解决方式 问题2解决方式 四、LVS-DR部署实例1.配置NFS共享存储器2.配置节点web服务(两台的配置相同)3.配置LVS负载调度器 一、DR模式数据包流向分析 1.Client 客户端…

《计算机网络——自顶向下方法》精炼——3.7(2)

读书有三到:谓心到,眼到,口到。——明朱熹 文章目录 对链接吞吐量的简化描述高带宽路径的TCP公平性 对链接吞吐量的简化描述 为了简化对一条TCP连接吞吐量的描述,我们首先忽略连接过程中处于慢启动状态的时间,因为这一…

chatgpt赋能python:Python将yyyymmdd转换成yyyy-mm-dd的方法

Python将yyyymmdd转换成yyyy-mm-dd的方法 Python语言不仅易于学习,而且是一种功能强大的语言,广泛应用于数据分析、人工智能和Web开发等领域。在实际开发过程中,我们经常遇到需要将日期格式转换为其他格式的需求。本文将介绍如何使用Python将…

Nginx rewrite

目录 一、location 1.location 匹配规则介绍 2. 实际网站使用中匹配规则 2.1第一个必选规则 2.2第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项 2.3第三个规则就是通用规则 3.location 匹配规则演示 2.1一般前缀匹配 2.2正则匹配 2.3正则…

电池状态估计 | Matlab实现利用卡尔曼滤波器估计电池充电状态

文章目录 效果一览文章概述研究内容程序设计参考资料效果一览 文章概述 电池状态估计 | Matlab实现利用卡尔曼滤波器估计电池充电状态 研究内容 目前,常用的电池模型有:数

斐波那契数列题解(非递归c++方法实现)

在做信奥赛(信息学奥赛)中的for循环题目时,有一道斐波那契数列,想到的第一个方法是使用递归求解;因为以往题目最多使用的就是递归形式,但鉴于该题目在for循环题目堆,所以就思考了一些新方法&…

仙境传说RO:添加限购物品刷新物品库存教程

仙境传说RO:添加限购物品刷新物品库存教程 大家好我是艾西,在游戏中我们会有普通的基础装备那么必然就会有到顶的套装,往往可能一套到顶的套装就可能霸服。那么就需要GM去做游戏的设定以及限制,上一篇文章中我给大家讲述了如果创…

RabbitMQ的基本概念

目录 1、MQ 的基本概念 1.1 MQ概述 1.2 MQ 的优势和劣势 1.3 MQ 的优势 1. 应用解耦 2. 异步提速 3. 削峰填谷 小结: 1.4 MQ 的劣势 1.5 常见的 MQ 产品 1.6 RabbitMQ 简介 1.7 JMS 1、MQ 的基本概念 1.1 MQ概述 MQ全称 Message Queue(消息队列&#…

火山引擎DataLeap的Catalog系统搜索实践(三):Learning to rank与后续工作

Learning to rank Learning to rank主要分为数据收集,离线训练和在线预测三个部分。搜索系统是一个Data-driven system,因此火山引擎DataLeap的Catalog系统设计之初就需要考虑数据收集。收集的数据可以用来评估和提升搜索的效果。数据收集和在线预测前面…

Augmentation Matters:一种简单而有效的半监督语义分割方法(CVPR2023)

文章目录 Augmentation Matters: A Simple-yet-Effective Approach to Semi-supervised Semantic Segmentation摘要本文方法Random Intensity-based AugmentationsAdaptive Label-aided CutMix 实验结果 Augmentation Matters: A Simple-yet-Effective Approach to Semi-superv…

【C语言】C预处理器(宏、文件包含、条件编译...)

一、C语言编译的预处理阶段1.1 C语言的编译过程1.2 C语言编译的预处理 二、C语言 宏2.1替换常量2.2函数宏2.3 字符串化和连接:#和##2.4 变参宏 三、文件包含:#include3.1 写法3.2 头文件的作用——声明3.3 头文件和extern 、static 四、 其他指令4.1 #un…

路径之谜 2016年国赛 深度优先搜索

目录 解题思路 AC代码: 题目描述 小明冒充 XX 星球的骑士,进入了一个奇怪的城堡。 城堡里边什么都没有,只有方形石头铺成的地面。 假设城堡地面是 nn 个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或纵向…

公司新来一00后,真让人崩溃...

2022年已经结束结束了,最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备今年的金九银十的面试计划。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的…