关于压缩包及其算法 在日常计算机使用的过程中,不管是学习还是工作,都会遇到一个非常重要的文件——压缩包文件。 压缩包在学习或工作中最主要的职责便是进行文件数据的传播,一方面,压缩包利用压缩算法,减少文件体积,另一方面,由于硬盘对单一压缩包的写入效率比复数文件的写入效率高,压缩包也作为复数文件的打包工具,方便人们进行下载和拷贝。 常用的压缩格式有ZIP、RAR、7Z等(exe其实也是压缩包的一种),每个压缩格式所用的压缩算法不同,所以对于文件的压缩率也不同,目前压缩率最高的压缩格式是7Z。 说到压缩算法,最简单的压缩算法便是RLE 算法,在此之前,先了解一下计算机数据存储基础知识。 下面是关于压缩算法的有的没的,想了解关于压缩分卷的可以直接跳过 众所周知计算机由二进制0和1组成,0或1就表示1位(1bit,简写b),每8位即为1字节(8bit=1Byte,简写为B),在计算机中,一个字母或数字默认由8个0或1组成,也就是占用8位,即1字节。 回到RLE算法,以AAABBCDDDDEE为例,这12个字母占用的大小就是12字节,而通过RLE算法将其简写为A3B2C1D4E2,则只占用10字节。但RLE算法有个缺点,就是需要有连续重复的数据出现,若碰上26个字母同时出现,利用RLE算法,A1B1……Y1Z1,原本26字节变成了52字节。是不是很简单,现在你已经体会到基础压缩思想的魅力 既然RLE算法无法压缩没有连续重复的数据,那么有解决方法吗。字典算法便可以无视有无连续重复的数据进行压缩。通过构建字符字典,将大量字符定义到少量字符上,例如创建26个字母定义为letter的字典文件,那么26个字母只需要用这6个字母就可以表示,不过字典算法需要字典文件的支持,文件中记录了26个字母定义为6个字母的匹配信息,若没有字典文件则无法匹配定义。 但这还不是压缩算法的极限,1952年,哈夫曼提出二叉树编码,也称为哈夫曼编码。还是以AAABBCDDDDEE为例,将字母出现的次数从大到小排序为D(4个)、A(3个)、B(2个)、E(2个)、C(1个),将最少的C独立开来,D和A、B和E两两配对,随后将数量少的B和E与C配对,最后集合到一起,将向左的树杈定义为0,向右的树杈定义为1,则出现下图每个字母对应的二进制代码。 二叉树编码 则AAABBCDDDDEE就是0101011001001100000000101101 原本12字节的数据被压缩为28位即3.5字节,哈夫曼编码在有这么高的压缩率的同时还是无损压缩,可以完全恢复原始数据而不引起任何失真。 压缩分卷又是什么 说了这么多有的没的,那压缩分卷又是什么东西呢。以一个20MB的U盘为例,我想把96.7MB的压缩包放进U盘分享给别人,由于这一个压缩包的大小已经超出U盘的最大承受能力20MB。那么利用压缩分卷技术,就可以把一个大压缩包分为若干个小压缩包,但总大小不会改变,一个96.7MB的压缩包也就被分为了4个20MB和1个16.7MB的压缩分卷文件。 压缩分卷 只有第一个是普通压缩包,其他的都是压缩分卷文件 压缩分卷通常会在压缩格式后缀之后还带有数字编号,且分卷文件缺一不可。将压缩分卷全部放在同一个文件夹下,使用时只需要打开数字编号为1的压缩包即可,软件程序会自动连接其他压缩分卷进行解压。压缩分卷的使用场景基本都在大文件传输分享上,比如一些网盘限制单个文件的上传大小,这个时候就可以利用压缩分卷减少单个文件的大小,从而成功将完整的文件上传到网盘 |
网站内容来自网络,如有侵权请联系我们,立即删除!
Copyright © 风筝常识网 鲁ICP备2021038129号-49