在导出数据库 SQL 文件见后发现有 700M+,上传服务器很不方便,使用打包压缩命令:

# 压缩
tar zcvf FileName.tar.gz DirName
# 解压
tar zxvf FileName.tar.gz

压缩打包 SQL 文件后压缩到了 300M+,小了近一半,那么为什么文件可以压缩这么多呢?

压缩简单的理解为:通过算法,消除冗余的内容,或合并相同的内容。

SQL 文件中存在着大量的空格,空行等,而且是纯文本文件,这些都可以可以被大幅度的压缩。而对于一些音频\视频文件,将不便于直接的打包压缩,压缩量会很小。这些文件应该是有专门算法进行处理,而日常看到的这些应该是已经经过压缩的了。

一个知乎上回答

这个问题只要一句话就能解释明白:根据香农的信息理论,任何一个文件被无损压缩后的结果不可能小于其 熵 (信息论))。

换句话说,如果一个文件有 20G 多的大小,但是其信息熵只有 20M 多,则实现一个 1000 倍的压缩是完全可能的(比如楼主放出的几小时全黑视频);反过来看,一个文件如果虽然只有 100M,但是其信息熵却高达 90M,则这样的文件是无论如何也不可能被无损压缩至 20M 大小的。

多说一句,一个文件的信息熵有多少,靠一个公式是完全可以算出来的。所以只要提供任何一个文件,我们都能知道它最小可以被压缩到多少。

以上说法仅限于无损压缩,对于有损压缩来说,压缩了多少倍皆有可能。

作者:夏晓昊
链接:https://www.zhihu.com/question/19925039/answer/19846297
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

另一个知乎上的回答

因为从理论上来讲,所有的信息如果想要表达一个特定地,不会有歧义的含义,在数学上都会有一个最小的「信息熵」(信息量)才可以。

如果仅仅就理论来举个简单的例子的话,经典的连续数学理论会认为,如果用135胶卷相机拍出来的胶卷能冲洗出一张5寸的照片,而里面的所有细节都可以得到保留,那么我们在太空上对着地球用相机拍下一张胶片,然后想办法尽量将这张胶片放大,就可以看到天安门广场上的行人。

你会认为这是玩笑是吗?事实上,用谷歌地球上的数据库,不就拼成了一张这样的照片么?但是其代价,绝不是一张胶片能包含的信息量,而是上百个 TB 的数据。

这意味着什么?意味着信息的本质是离散而不是连续的,如果要想看出「地球是个圆的」,也许巴掌大的照片就够了,但是想要看到地球上更清晰的细节,则没有捷径可走,只有增加照片的信息量——换言之,信息量和能量一样,是守恒的。

那么压缩文件的原理是什么?

就是利用「一个文件的体积与它的信息量并不相等,而且它的体积肯定要大于它的信息量」的特点,使用算法「将一个文件所包含的同样的信息量用更少的容量来描述」。

举个简单的例子,一张大小为 3x3 的图片是纯黑色的,那么我们用两种方法来描述这张图片:

这张图片是3x3的,且他们的颜色分布为:{纯黑色,纯黑色,纯黑色, 纯黑色, 纯黑色, 纯黑色, 纯黑色, 纯黑色, 纯黑色}

这张照片是3x3的,且它们的颜色全部是:{纯黑色}

可以明显看出,第二种描述的方法比第一种描述的方法占用的空间(容量)要小得多。无损图像压缩算法中的「行程算法」就部分借鉴了这样的思想。

作者:夏晓昊
链接:http://www.zhihu.com/question/20207589/answer/14333722
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

压缩文件为什么不能一层层压缩自身?

按照你的想法压缩下去之后,最终成为 1 byte也就是 8 bit,然后成为 1 bit也就是 1 位。1 位有两个状态,进一步压缩成一个状态,一个状态毋需表示,所以也就不用存储了。

看到没有,这就是逆向的道德经,万物成 8 卦,8 成 2,2 成 1,1 从有到无。

可惜,世人都不理解大道。
因为他们还没找到解压的办法。

作者:萧井陌
链接:http://www.zhihu.com/question/20207589/answer/33097345
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。