常用压缩算法知识梳理
我们使用电脑时,时不时就会遇到压缩文件,那么你对压缩文件了解多少,知道它使用什么压缩算法压缩的,这个压缩算法具有什么特性吗?这片博文将来解决的你疑惑。
压缩算法分类
即时压缩和非即时压缩
即时压缩
将语音信号转化为数字信号,同时进行压缩,然后即时通过Internet传送出去。即时压缩一般应用在影像、声音数据的传送中。
非即时压缩
是在需要的情况下才进行,没有即时性。非即时压缩一般不需要专门的设备,直接在计算机中安装并使用相应的压缩软件即可。
数字压缩和文件压缩
数字压缩
专指一些具有时间性的数据,这些数据常常是即时采集、即时处理或传输的。
文件压缩
专指对将要保存在磁盘等物理介质的数据进行压缩,如一篇文章数据、一段音乐数据、一段程序编码数据等的压缩。
有损压缩和无损压缩
有损压缩
利用了人类视觉、听觉对图像、声音中的某些频率成分不敏感的特性,允许压缩的过程中损失一定的信息。有损压缩广泛应用于语音、图像和视频数据的压缩。
无损压缩
利用数据的统计冗余进行压缩,所以无损压缩的压缩比一般比较低。这类方法广泛应用于文本数据、程序和特殊应用场合的图像数据等需要精确存储数据的压缩。
2.1 字典算法
1
2
3
4
5
6定义字段表:
00=Chinese
01=People
02=China
原文:I am a Chinese people,I am from China。
压缩后:I am a 00 01,I am from 02。2.2 固定位长算法
1
2
3二进制为:00000001,00000010,00000011,00000100,00000101,00000110,00000111,00001000
对低4位进行压缩编码后得到:0001,0010,0011,0100,0101,0110,0111,1000
然后补充为字节得到:00010010,00110100,01010110,01111000。2.3 RLE算法
1
2文本字符串:A A A B B B C C C C D D D D
编码后得到:3 A 3 B 4 C 4 D2.4 LZ77算法
LZ77算法是采用自适应的字典模型,将已经编码的信息作为字典,如果要编码的字符曾经出现过,就输出该字符串的出现位置以及长度,否则输出新的字符串。
1
2
3
4原本:
取之以仁义,守之以仁义者,周也。取之以诈力,守之以诈力者,秦也。
以“取之以仁义,守之以仁义者,周也。”为字典后面的语句压缩成:
[(1-3),(诈力),(6),(7-9),(诈力),(12),(6),(秦),(15-16)]2.5 huffman算法
huffman和LZ77算法本质原理相同,都是通过字典替换;区别于LZ77的是huffman需要预先知道信源的字符频率。(因为大多数情况下,这种先验知识是很难预先获得所以后面出现了LZ77)
2.6 deflate算法
简单的理解就是先使用LZ77压缩后,将结果在用huffman压缩。
linux常用的压缩命令
tar
tar是linux下的大包命令,光使用tar大包是不会对文件进行压缩的;但是如果添加了操作符比如-zcvf或者-jcvf,则会对文件进行压缩。-z指定使用gzip压缩,-j指定使用bzip2压缩。
tgz
tgz是linux下的解压缩文件命令。
gzp(gzip)
压缩和解压缩命令,使用deflate算法压缩,只支持单个文件,不支持文件夹。
zip
压缩和解压缩命令,使用deflate算法压缩,支持文件夹,大小限制4G。
rar
压缩和解压缩命令,使用专有压缩算法(申请了专利),支付文件夹,且无大小限制。
ps:参考