通用数据压缩算法简介

 

通用数据压缩算法简介

前言

数据压缩技术始终是让我感觉到比较神秘的数学算法之一,而当我接触到其具体的算法时候,发现其原理是如此的简单,所以就写了这篇文件来谈谈自己的感想。但由于本文篇幅有限,就以只以一个最简单的LZ77算法作为例子来讲解。

数据压缩技术其应用十分普遍,WinRar,WinZip等常规数据压缩软件已经成为现在电脑的必备软件了。互连网上到处都可以看到压缩文件包。而常规多媒体文件甚至把压缩算法嵌入到其文件格式的标准内。像现在图形图像方面的jpeg,png,gif,音频mp3,视频VCD,DVD就不用说了。

 

数据压缩技术的分类

数据压缩算法主要分有损压缩和无损压缩两种。无损压缩就是能够完全还原的压缩算法. 而有损压缩就是不能完全还原的压缩算法。比如典型的mp3音频就是有损压缩算法,虽然它损失了一些本来的音频信息,但是它能极大地提高其压缩比例,而损失的那点信息对整个音乐片段没有多大影响。本文介绍的通用数据压缩算法针对的不是某种具体的音频或者视频信息,而是一种通用的数据信息,我们并不知道什么信息能够损失,什么信息该保留,所以它肯定就是无损压缩了。我们平时在Windows下使用的WinZip,WinRar的压缩就是标准的通用数据压缩,而本文讲解的算法也就是这些算法。

 

通用数据压缩技术发展

我们在大学课程《离散数学》和《数据结构》里面都学过Huffman树。几乎每本讲Huffman树的书都会提到使用Huffman树构造最小冗余度的前缀编码。Huffman编码就是数据压缩技术的基础。D.A.Huffman1952发表了他的论文《最小冗余度代码的构造方法》揭开了早期的数据压缩技术形成。早期的数据压缩技术就是基于编码上的优化技术。但是我们都知道这种编码上的优化是要统计数据的出现概率的。但是在处理大文件的时候,统计文件里面的字符概率是件十分麻烦的时候,要消耗很长的计算时间。实际的方法都是采用一种叫做自适应编码的方式,也就是在压缩的时候来不断统计字符的概率。这种方法在压缩开始的时候效果不是很好,但是到了压缩后面,它统计的概率就会越来越接近真实的字符出现的概率。(具体的这类算法我还没有仔细研究过,所以我就不好讲解了。)

1977 年,以色列人 Jacob Ziv 和 Abraham Lempel 发表了论文《顺序数据压缩的一个通用算法》, 1978 年,他们发表了该论文的续篇《通过可变比率编码的独立序列的压缩》。从此,数据压缩技术进入字典型的模式压缩了。字典型的数据压缩十分容易明白,就是尽量不保存重复的信息而已。那两个以色列人发明的算法LZ77,LZ78就是现在流行的Zip压缩算法的前身。1984 年,Terry Welch 发表了名为《高性能数据压缩技术》(A Technique for High-Performance Data Compression)的论文,也就是现在流行的LZW压缩算法的实现。其实LZW压缩算法和LZ77,LZ78的压缩没有多大的区别,只是在实现手段有进一步的优化。现在著名的GIF图片格式中保存内部每个点的颜色的信息就是使用LZW那套算法。LZ77,LZW这种字典型的数据压缩方式压缩比例远远比单纯的从编码上的优化的压缩要高。而且这种压缩算法无论是在压缩还是在解压,执行效率都比以前的编码优化压缩要高得多!

Unix 上当时使用LZW的压缩程序Compress几乎成为Unix上压缩程序的标准。而同时在MS-DOS上也有一个同样的叫ARC程序的压缩程序。80 年代中期以后,人们对 LZ77 进行了改进,随之诞生了一批我们今天还在大量使用的压缩程序。Haruyasu Yoshizaki(Yoshi) 的 LHarc 和 Robert Jung 的 ARJ 是其中两个著名的例子,还有到今天都已经成为压缩标准的Zip压缩。

 

最小长度的Huffman编码

下面我们开始进入数据压缩的正题。

几乎每篇讲解数据压缩的文章都会把“信息熵”摆出来讲解。但是本文篇幅有限,不打算讲解了。因为一旦把信息熵讲解出来,那么以后的压缩都会信息熵联系在一起了,挺麻烦的。我们直接进入数据的编码部分。不要以为只有早期的编码优化的压缩才涉及到数据的编码,其实现在Zip,Rar压缩内部也使用了优秀的数据编码方式,来缩小信息的冗长。</

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值