首页 > 编程语言 >6.4通过莫尔斯编码来看哈夫曼算法的基础

6.4通过莫尔斯编码来看哈夫曼算法的基础

时间:2023-02-06 10:33:38浏览次数:44  
标签:编码 字节 哈夫曼 字符 短点 6.4 莫尔斯

压缩技巧实际上有很多种。接下来,我们就来看一下本章要介绍的第二个压缩技巧,即哈夫曼算法。

哈夫曼算法是哈夫曼(D.A.Huffman)于1952年提出来的压缩算法。日本人比较常用的压缩软件LHA(LHA是吉崎荣泰开发的一款免费压缩软件),使用的就是哈夫曼算法。为了更好地理解哈夫曼算法,首先大家要抛弃掉“半角英文数字的1个字符是1个字节(8位)的数据”这一概念。文本文件是由不同类型的字符组合而成的,而且不同的字符出现的次数也是不同的。例如,在某一个文本文件中,A出现了100次左右,Q仅用到了3次,类似这样的情况是很常见的。而哈夫曼算法的关键就在于“多次出现的数据用小于8位的字节数来表示,不常用的数据则可以用超过8位的字节数来表示”。A和Q都用8位来表示时,原文件的大小就是100次×8位+3次×8位=824位,而假设A用2位、Q用10位来表示,压缩后的大小就是100次×2位+3次×10位=230位。
不过有一点需要注意,不管是不满8位的数据,还是超过8位的数据,最终都要以8位为单位保存到文件中。这是因为磁盘是以字节(8位)为单位来保存数据的(如下图):

为了实现这一处理,压缩程序的内容会复杂很多,不过作为回报,最终得到的压缩率也是相当高的。
为了更好地理解哈夫曼算法,先来看一下莫尔斯编码。莫尔斯编码是1837年莫尔斯(Samuel E.B.Morse)提出的。莫尔斯编码不是通过语言,而是通过“嗒嘀 嗒 嘀”这些长点和短点的组合来传递文本信息的。想必大家在电影中也都看到过发送莫尔斯电码的设备。
接下来我们就来仔细讲解一下莫尔斯编码。对数字领域比较熟悉的读者可能会认为“莫尔斯编码的短点是0,长点是1,其中1个字符用8位来表示”,但实际上,根据字符种类的不同,莫尔斯电码符号的长度也是不同的。下面这个表是莫尔斯编码的示例:

 

 

 大家把1看作是短点(嘀),把11看作是长点(嗒)即可。

莫尔斯编码把一般文本中出现频率高的字符用短编码来表示。这里所说的出现频率,不是通过对出版物等文章进行统计调查得来的,而是根据印刷行业的印刷活字数目而确定的。如下图所示:

 

 

 假设表示短点的位是1,表示长点的位是11的话,那么E(嘀)这一字符的数据就可以用1位的1来表示,C(嗒嘀嗒嘀)这一字符的数据就可以用9位的110101101来表示。在实际的莫尔斯编码中,如果短点的长度是1,长点的长度就是3,短点和长点的间隔就是1。这里的长度指的是声音的长度。接下来,就让我们尝试一下用莫尔斯编码来表示前面提到的AAAAAABBCDDEEEEEF这个17个字符的文本。在莫尔斯编码中,各个字符之间需要加入表示间隔的符号。这里我们用00来进行区分。因此,AAAABBCDDEEEEEF这个文本,就变成了A×6次+B×2次+C×1次+D×2次+E×5次+F×1次+字符间隔×16=4位×6次+8位×2次+9位×1次+6位×2次+1位×5次+8位×1次+2位×16次=106位14字节。因为文件只能以字节为单位来存储数据,因此不满1字节的部分就要圆整成1个字节。如果所有字符占用的空间都是1个字节(8位),这样文本中列出来的17个字符=17字节,那么摩尔斯电码的压缩比率就是14÷17=82%,并不太突出。

标签:编码,字节,哈夫曼,字符,短点,6.4,莫尔斯
From: https://www.cnblogs.com/2674308160-lucky/p/17094639.html

相关文章

  • 6.4通过莫尔斯编码来看哈夫曼算法的基础
    哈夫曼算法是1952年提出的压缩算法,日本人常用的压缩软件LHA使用的就是哈夫曼算法。文本文件是由不同类型的字符组合而成的,而且不同的字符出现的次数也是不同的。  注......
  • 6.4【微信小程序全栈开发课程】记录页面(四)--mpvue时间格式化
    将数据库中的数据格式化成YYYY.MM.DDhh:mm的格式,比如2019.10.1220:241、修改日期文件mpvue框架中有一个专门格式化日期的文件src/utils/index.js文件,将日期格式化成“YYYY......
  • [数据结构] 哈夫曼树
    哈夫曼树哈夫曼树简介给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(HuffmanTree)。哈夫曼......
  • MAUI新生6.4-集合内容类控件难点:CollectionView
    一、基本使用(数据源在ViewModel中硬编码)//①在Models文件夹下,新建Employee.cs文件,创建Employee类型publicclassEmployee{publicintId{get;set;}publ......
  • 16.4 SQL Server删除角色
    SQLServer删除角色目录SQLServer删除角色简介示例1)DROPROLE简单示例2)DROPROLE删除具有成员的角色简介语法:DROPROLE[IFEXISTS]role_name;DROPROLE无法删除拥......
  • Qt6.4.2 QSoundEffect 在 ubuntu22.04 下的不好用
    本着跟踪技术潮流和尝鲜精神,一直尽量让自己机器安装最新环境,还要经常保持升级。ubuntu版本是22.04,Qt是6.4.2。最近对morse码很感兴趣,想学习找不到合适工具,所以就用Qt6写一......
  • 哈夫曼树复习
    哈夫曼编码--最基本的压缩编码方法哈夫曼树,特殊的二叉树 哈夫曼树的定义与原理:WPL最小构造步骤1,先把有权值的叶子结点按照,从小到大的顺序排列成一个有序序列2,取头两......
  • Downie V4.6.4 for Mac 视频下载工具
    前言Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。![在这里插入图片描述](http......
  • Centos7.6部署k8s v1.16.4高可用集群(主备模式)
    原文:https://zhuanlan.zhihu.com/p/465647563一、部署环境主机列表:共有7台服务器,3台controlplane,3台work,1台client。k8s版本:二、高可用架构本文采用kub......
  • USB应用实战视频教程第5期:手把手玩转USB HID免驱方式下位机和QT6.4上位机开发上篇(2022
     前两期USB实战视频教程分享了USBBULK的下位机和QT6.4下位机开发,本期视频教程,我们带来HID的免驱方式玩法,上篇依然是先分享下位机开发方式另外还有很重要的一点,早期的F1,F2......