我们使用电脑时,时不时就会遇到压缩文件,那么你对压缩文件了解多少,知道它使用什么压缩算法压缩的,这个压缩算法具有什么特性吗?这片博文将来解决的你疑惑。

压缩算法分类

即时压缩和非即时压缩

  1. 即时压缩

    将语音信号转化为数字信号,同时进行压缩,然后即时通过Internet传送出去。即时压缩一般应用在影像、声音数据的传送中。

  2. 非即时压缩
    是在需要的情况下才进行,没有即时性。非即时压缩一般不需要专门的设备,直接在计算机中安装并使用相应的压缩软件即可。

数字压缩和文件压缩

  1. 数字压缩

    专指一些具有时间性的数据,这些数据常常是即时采集、即时处理或传输的。

  2. 文件压缩

    专指对将要保存在磁盘等物理介质的数据进行压缩,如一篇文章数据、一段音乐数据、一段程序编码数据等的压缩。

有损压缩和无损压缩

  1. 有损压缩

    利用了人类视觉、听觉对图像、声音中的某些频率成分不敏感的特性,允许压缩的过程中损失一定的信息。有损压缩广泛应用于语音、图像和视频数据的压缩。

  2. 无损压缩

    利用数据的统计冗余进行压缩,所以无损压缩的压缩比一般比较低。这类方法广泛应用于文本数据、程序和特殊应用场合的图像数据等需要精确存储数据的压缩。

    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 D

    2.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:参考

  1. 常用的几种压缩算法
  2. lz77压缩算法