LZW压缩算法的实现与效率分析

本文介绍了LZW压缩算法的原理,通过实例代码展示了其实现过程,并与zip压缩进行了效果对比分析。尽管LZW在某些特定情况下能实现压缩,但面对已压缩的文件格式如MP4、MP3、FLAC时,可能会导致文件增大。
摘要由CSDN通过智能技术生成

原理分析

此处压缩编码的原理,就是利用字典,将重复的内容用实时创建的字典来代替,如abab,压缩后得到的是ab[e0](e0代表字典代替,并非实际效果),而abababab,压缩后得到ab[e0][e1](其中e0为ab,而e1为abab),编码端和解码端分别建立字典,最终得到的压缩文件不含字典内容,而为了表示压缩的内容,本例中使用了扩展Ascll码。

示例代码

此处的示例代码单独存放,可以在此查看,不占用本文的大部分空间

实际效果对比分析

此处选择了zip与此例中使用的lzw算法进行对比分析,之所以选择zip,首先zip是目前常用的开源无损压缩算法之一,同时zip是Phil Katz由LZ77算法的思想发展过来最终编码实现的,而LZ77算法的提出者Jacob Ziv和Abraham Lempel后续发布了包括LZW在内的诸多算法,并且查阅资料了解到在GIF算法中有LZW的应用。
回归正题,我们查看实际文件的压缩效果,本例的压缩可能对于zip压缩的唯一优势就是极少的文件头和文件尾,这里只用开头的8字节发送了原文件长如下图00000055即为16进制的55,也就是85字节
在这里插入图片描述

而一个zip文件就有更多内容,下面是由一个空的txt文件压缩得到的zip文件
在这里插入图片描述在这里插入图片描述

在其中可以看到原文件名(_.txt)和明显的几个PK的标记(纪念zip的创始人Phil Katz),除此之外的部分如下图所示这些内容对于一个实际能够广泛使用的压缩算法来说是必要的,而本例中只能自娱自乐用了,因为没有一个市面上的解码器能识别这个文件的格式。
在这里插入图片描述

在这里插入图片描述

实际压缩的例子
文件 压缩前 压缩后 压缩方式
MP4视频文件 76630KB 94137KB lzw
MP4视频文件 76630KB 76648KB zip
内容为ababab的txt文件 6bit 12bit lzw
内容为ababab的txt文件 6bit 160bit zip
MP3音频文件 3526kb 4238kb lzw
MP3音频文件 3526kb 3469kb zip
FLAC音频文件 28963kb 35500kb lzw
FLAC音频文件 28963kb 28968kb zip
全是重复的ab的文本文档 18578bit 548bit lzw
全是重复的ab的文本文档 18578bit 182bit zip
本例中的代码文件 5277bit 3878bit lzw
本例中的代码文件 5277bit 1785bit zip
完全没有重复的txt文本文档 85bit 170bit lzw
实际压缩结果分析

很显然经过此例的压缩得到的结果基本都不能让人感到理想,在面对完全重复,最适合压缩的文件,全是重复的ab文本文档时也没有达到zip的压缩程度,当然这里对比并非要与zip一较高下,这一文件被压缩为:

00 00 48 92 00 61 00 62 01 00 01 02 01 01 01 04 01 03 01 06 01 05 01 08 01 07 01 0A 01 09 01 0C 01 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值