«

常见的压缩算法有哪些?

时间:2025-12-11 16:45     作者:独元殇     分类: 其他


上大学的时候,我一个教授,是数据压缩方面的专家,研究过这些东西。

然后给我们在讲正课的时候,一不小心就偏离主线(他也经常一不小心讲政治、讲旧社会的事),为我们讲过这方面的东西,当然,大学一节课俩小时,也讲不了太多,不过课下,我还真有段时间对这问题感兴趣过。也简单研究过。

现在主流的压缩比较强、通用性较高的算法,有 5 种:

其实这些看着都花里胡哨的,但分开来看,原理都特别简单。

今天用最简单的人话给诸位讲一下,每个都 100~200 字左右!

不过很可惜,现在人都不热衷于研究压缩算法了,上面这 5 种肯定不是所有的压缩算法,其实目前这个学科依然非常分散,而且越来越小众了。人们面对现在巨大的科技飞跃储存技术,都没人在乎。更甚,这些东西有很多已经算是失传的东西了。不过,单纯从趣味来说,还是很有趣的。


先说第一个,LZSS 。

这是最古老的算法,全称 Lempel-Ziv-Storer-Szymanski ,是四个科学家的名字连在一起了。

在西天的维基百科上有它的压缩例子:

压缩前:

img

压缩前

压缩后:

img

压缩后

看到了吗?

压缩器会对重复字符添加标记,待它再次出现时,使用标记(比如 (5,3))来代替。

LZSS 是一个征服世界的压缩算法。原理就这么简单。当然也有点问题,就是这个标记不能随便加,很可能造成数据没压缩,又到处是标记,然后文字大小反而膨胀了。

当然,真正生产环境下的 LZSS 会复杂很多。而上面那问题的解决方案也很粗暴:如果你的这个标记,长度比原文字还长,那就放弃。就这么简单.... 然后就能防止 【没压缩反而膨胀】 的问题。


然后就是字典编码。

这个更强大,理论上只要字典足够大,那么文件就足够小。

原理很简单,给常用的内容,起一个代号。

img

字典编码 前

然后我们让

< 1 > 代指 人工智能的发展

< 2 > 代指 深度学习技术

< 3 > 代指 带来了

结果就是:

img

字典编码 后

这就是它的基本思想。如果你高兴,你能设置几百个,然后结果会更小。


然后是算术编码!

它的特点是,速度很快,效率很高,性价比很高。它看起来会很复杂,它里面用到了数学。

理论上,极端的案例就是,我们耳熟能详的那个外星人在飞船上刻标记的故事:

外星人,要临走了,地球人要送它厚厚的《知识》,但是外星人搬不走,怎么办?就想了个办法,假设飞船长为 1,那么将这《知识》转为数字编码后,在飞船的某个位置刻下刻度,这个刻度就是 0.112315464... 处,只要外星人回到自己的星球,测量一下,得到这个数值,就能反推整个知识了,大概是这个故事。

这个 算术编码 详细的内容很复杂,但大概意思就是,按照出现概率和长短,给每个句子都划定一个小数,最后留下一串比原文短很多的小数。等解压的时候,根据规则,就能从这一堆数字,反推出原文。

感兴趣可以了解一下。这个算法有点深奥。


动态马尔可夫压缩:

这个与其他几个比起来,有点冷门。它也是一个根据概率学,为基础,搞的一个压缩算法。

其实,原理和我们手机电脑天天用的那个中文输入法差不多。就是根据当前的世界,当前你已经输入的内容,然后预测接下来的内容。就好像天气预报。

这个算法的具体内容,是相当复杂和困难的,资料相当少。

它之所以叫 马尔科夫 压缩,是因为它的算法里用到了 马尔可夫链 这个算法。

这个压缩效果很不错,就是很费内存。


最后是压轴的 霍夫曼编码 。

它是 字典压缩 和 概率 的结合。

和字典压缩不一样的是,它最开始,会先把全文读一遍,把所有字符的出现概率给搞出来,然后在内存里列一个表(或者说 树)。后续的工作,围绕这个表进行。

1 Byte(字节)等于 8 bits(比特),大家知道吧!

现在这个算法会重新分配这 8 bit 了。

这个霍夫曼压缩的工作核心就是,将现有的 8 位字符重新分配为更少的位数。为了优化压缩效果,频率最高的字符被赋予更小的比特值。

大概意思就是这样。

之后,就会产生一个要比原文件小的新的文件。

虽然它的压缩比不一定有上面的 算术编码 和 马尔科夫编码 高,但它占用内存很低,速度很快,效果还可以。它一样很古老,是 1952 年被发明出来的。


本文,没什么细节,就是旨在用最简单的话,把常用的 5 个压缩算法讲一下,如果大家对细节感兴趣,可以在网上寻找它们的资料。不过,这些资料可能会很少,最好还是看 维基百科 或者问 AI 。

这方面的学问,一点不比造操作系统、编译器、三维游戏引擎图形学 低。

标签: 原创 算法