文件压缩如何工作?

文件压缩如何工作?

所以,我今天才意识到,我把文件压缩视为理所当然。将几个文件打包成一个文件,然后压缩后的文件比其中任何一个文件都小,这是我接受的事实,但它究竟是如何工作的呢?

我对此的了解有限,包括用指针替换所有重复的条目,以此方式缩小,但除此之外,我相当无知!

我总是乐于接受新知识,我想我们大多数人都是这样,所以我想问一下。那么,超级用户,压缩是如何实现的实际上工作?

答案1

无损压缩

无损压缩是指不会丢失任何数据。输入的所有内容都可以完美恢复。这非常适合文本或二进制文件,因为即使是最小的错误也会被注意到。

文件压缩的​​工作原理是获取文件并扫描模式,然后将这些模式转换成占用更少空间的其他内容。

例如“AAAAAAAA”可以变成“8A”。

当然,事实并非如此,因为这样你就会有问题,如果“8A”是明文的话会怎样。你会解压文件,但结果却是错误的。一个好的起点是维基百科或LZW数据压缩算法

下面复制了一些简单的伪代码:

STRING = get input character
WHILE there are still input characters DO
    CHARACTER = get input character
    IF STRING+CHARACTER is in the string table then
        STRING = STRING+character
    ELSE
        output the code for STRING
        add STRING+CHARACTER to the string table
        STRING = CHARACTER
    END of IF
END of WHILE
output the code for STRING

所有压缩都使用查找字典来压缩和解压缩文件。字典越大,压缩率越高,尽管你确实会遇到收益递减规律

还值得注意的是,压缩并不一定总能使文件变小。有些情况下(文件较小,或者压缩随机数据时)你将不是压缩后文件变小。有一些有趣的挑战与压缩随机数据的能力有关。

“有损”压缩

以上主要涉及无损压缩. 视频/音频应用程序中使用的其他类型的压缩,如 MP3、JPG 和 h.264 就是例子有损压缩

有损压缩的工作原理是丢弃最不可能被注意到的数据。在音频中,这是大约 30,000 赫兹和 100 赫兹以下的声音,以及其他各种东西。在图片(静态)中,它会删除各种东西并将像素合并在一起,同时丢弃数据。

有损压缩是一种变换编码。它会对数据进行平均以减小整体大小。例如,图像中 10 个像素的块,所有略有不同的颜色可能会合并为一种颜色,从而进行压缩。

在视频压缩中,通常会放置指令以仅重绘自上一帧以来发生变化的像素,或者关键帧

答案2

压缩的工作原理是查找数据中的模式,然后用特殊的较小模式替换这些模式。解压缩是相反的:查找特殊模式,并用它们所代表的较大模式替换它们。了解哪些模式是可能的很重要;例如,在文本中找到的模式可能与在图像中找到的模式完全不同。一些压缩技术是有损的;它们不能保证扩展将完全恢复输入。如果损失足够小,这通常适用于模拟数据,例如音乐和图像。但文本等数据必须使用无损技术进行压缩。

重要的是要意识到,即使只压缩一位,也不可能无损地压缩随机数据。考虑一个包含 N 位二进制数据的文件。可能的文件有 2^N 个。如果用一位压缩这些文件中的任何一个,那么压缩文件的大小为 N-1 位,则只有 2^(N-1) 种可能的压缩表示。换句话说,每个可能的压缩文件必须代表多个可能的未压缩文件。如果没有唯一的压缩表示,解压缩算法就无法保证无损解压缩。

相关内容