RLE算法机制、缺点及哈夫曼算法和莫尔斯编码

简介: RLE算法机制、缺点及哈夫曼算法和莫尔斯编码

一、RLE算法机制


       对 AAAAAABBCDDEEEEEF 这17个半角字符的文件(文本文件)进行压缩。虽然这些文字没有什么实际意义,但是很适合用来描述RLE的压缩机制


       由于半角字符(其实就是英文字符)是作为1个字节保存在文件中的,所以上述的文件大小就是17字节。如下图:


17个英文字符占用空间:



如何才能压缩该文件呢?只要能够使文件小于17字节,我们可以使用任何压缩算法

最显而易见的一种压缩方式就是把相同的字符 去重化,也就是 字符 * 重复次数 的方式进行压缩,所以上面文件压缩后就会变成下面这样:


文件压缩后的文件大小:



从图中可以看出,AAAAAABBCDDEEEEEF的17个字符成功被压缩成了 A6B2C1D2E5F1 的12个字符,也就是 12/17 = 70% ,压缩成功了


像这样,把文件容易用 数据* 重复次数 的形式来表示压缩方法称为 RLE(Run Length Encoding,行程长度编码)算法。RLE算法是一种很好的压缩方法,经常用于压缩传真的图像等。因为图像文件的本质也是字节数据的集合体,所以可以用RLE算法进行压缩


二、RLE算法的缺点


RLE的压缩机制比较简单,所以RLE算法的程序也比较容易编写,所以使用RLE的这种方式更能让你体会到压缩思想,但是RLE只针对特定序列的数据压缩,下面式RLE算法压缩汇总:


文件类型 压缩前文件大小 压缩后文件大小 压缩比率
文本文件 14862字节 29065字节 199%
图像文件 96062字节 38328字节 40%
EXE文件 24576字节 15198字节 62%


通过上表可以看出,使用RLE对文本文件进行压缩后的数据不但没有减小,反而增大了!几乎是压缩前的两倍!因为文本字符中连续的字符并不多见。


就像上面的示例一样,RLE算法只针对 连续 的字节序列压缩效果比较好,假如有一连串不相同的字符该怎么压缩呢? 比如说 ABCDEFGHIJKLMNOPQRSTUVWXYZ ,26个英文字母所占空间应该是26个字节,我们用RLE压缩算法压缩后的结果为:


A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1,所占用52个字节,压缩完成后的容量没有减少,反而增大了,这显然不是我们想要的结果,所有这种情况下下就不能再使用RLE进行压缩


三、哈夫曼算法和莫尔斯编码


下面是另一个压缩算法,即哈夫曼算法。在了解哈夫曼算法之前,必须舍弃 半角英文数组的1个字符是1个字节(8位)的数据。下面式哈夫曼算法的基本思想


文本文件是由不同类型的字符组合而成的,而且不同字符出现的次数也是不一样的。例如,在某个文本文件中,A出现了100次左右,Q仅仅用到了3次,类似这样的情况很常见。哈夫曼算法的关键就在于多次出现的数据用小于8位的字节数表示,不常用的数据则可以使用超过8位的字节数表示。A和Q都用8位表示时,原文件的大小就是100次 * 8位 + 3位 * 8位 = 842位,假设A用2位,Q用10位来表示就是2 * 100 + 3 * 10 = 230位


不过需要注意的是,最终磁盘的存储都是以8位为一个字节来保存文件的


莫尔斯编码在以前的美剧和战争片的电影,在通信的时候经常采用摩尔斯编码来传递信息



下面式莫尔斯编码的示例,可把1看作短点(嘀),把11看作是长点(嗒即可)



莫尔斯编码一般把文本中出现最高频率的字符用 短编码 来表示。如表所示,假如表示短点的为是1,表示长点的位是11的话,那么E(嘀)这个数据的字符就可以用1来表示,C(滴答滴答)就可以用9位的 110101101 来表示。在实际的莫尔斯编码中,如果短点的长度是1,长点的长度就是3 ,短点和长点的间隔就是1。这里的长度指的就是声音的长度。比如我们想用上面的AAAAAABBCDDEEEEEF 的例子来用莫尔斯编码重写,在莫尔斯编码中,各个字符之间需要加入表示时间间隔的符号。这里我们用 00 加以区分


所有,AAAAAABBCDDEEEEEF 这个文本就变成了 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字节


所以使用莫尔斯电码的压缩比为 14 / 17 = 82% ,效率并不太突出


目录
相关文章
|
23天前
|
存储 缓存 运维
一致性哈希算法的缺点是什么?
【10月更文挑战第25天】虽然一致性哈希算法具有一些优点,如在节点变化时数据迁移量相对较小等,但也存在数据倾斜、虚拟节点复杂、节点数量少性能受限、数据迁移代价以及哈希函数选择等多方面的缺点。在实际应用中,需要根据具体的业务场景和系统需求,综合考虑这些因素,采取相应的优化措施来克服其缺点,充分发挥一致性哈希算法的优势。
WK
|
2月前
|
算法 决策智能
PSO算法的缺点有哪些
粒子群优化(PSO)算法是一种基于群体协作的随机搜索方法,源自对鸟群觅食行为的模拟。尽管其在多领域展现了独特优势,但也存在显著缺点:易陷局部最优、搜索精度不足、高度依赖参数设置、理论基础薄弱、适用范围有限及早熟收敛问题。针对这些问题,可通过结合其他优化算法、调整参数及改进更新公式等方式提升其性能。
WK
64 0
WK
|
2月前
|
算法 决策智能
粒子群算法的缺点是什么
粒子群算法(PSO)虽具优点,但存在明显缺点:易陷局部最优、收敛精度低、难解离散及组合优化问题、缺乏精密搜索方法、理论基础薄弱、参数选择困难、收敛速度受问题复杂度影响。为克服这些问题,研究者提出引入动态惯性权重、调整学习因子、混合算法等改进策略,提高算法性能与适用范围,但仍需进一步研究以应对更复杂多样的问题。
WK
106 0
|
3月前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
3月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
4月前
|
机器学习/深度学习 存储 算法
编码之舞:从算法到应用的探索之旅
在数字化时代的浪潮中,编程技术如同一种语言,连接着人类与机器。本文将带领读者踏上一场自数据结构基础至高级算法应用的探索旅程,通过实际案例分析,揭示算法在现代软件开发中的重要作用,并分享作者在编程实践中的心得体会,旨在为初学者和资深开发者提供有价值的参考与启示。
|
4月前
|
机器学习/深度学习 算法 计算机视觉
通过MATLAB分别对比二进制编码遗传优化算法和实数编码遗传优化算法
摘要: 使用MATLAB2022a对比了二进制编码与实数编码的遗传优化算法,关注最优适应度、平均适应度及运算效率。二进制编码适用于离散问题,解表示为二进制串;实数编码适用于连续问题,直接搜索连续空间。两种编码在初始化、适应度评估、选择、交叉和变异步骤类似,但实数编码可能需更复杂策略避免局部最优。选择编码方式取决于问题特性。
|
4月前
|
存储 算法 缓存
高并发架构设计三大利器:缓存、限流和降级问题之滑动窗口算法的原理是什么
高并发架构设计三大利器:缓存、限流和降级问题之滑动窗口算法的原理是什么
|
4月前
|
算法 Java
详解 Java 限流接口实现问题之漏桶限流算法的缺点问题如何解决
详解 Java 限流接口实现问题之漏桶限流算法的缺点问题如何解决
下一篇
无影云桌面