数据压缩的极限
單位的電子郵件最大只能發5MB的附件,因此在發送文件的時候,經常會使用壓縮軟件把附件進行壓縮分卷,一個大的附件經常會分成十幾甚至幾十個小文件。在壓縮的時候想起了很久以前思考的一個問題:
數據能不能被無限壓縮?
在小學六年級電腦課教使用壓縮軟件的時候,老師說對已經壓縮過的文件再壓縮是沒有效果的。實際生活中直覺告訴我們也是這樣的:像程序代碼之類的文本文件,壓縮率很高,幾十MB的文件經過壓縮,有時候都不足5MB一封郵件就能發出去;而像JPG、MP3、RMVB這種文件,壓縮后和壓縮前基本看不出區別。我想,大概是因為JPG、MP3、RMVB都是已經被壓縮過的文件格式,而代碼文件是沒有經過壓縮的,所以才導致了兩者壓縮率的差異。
隨著后來上了大學,慢慢的對這個問題有了答案:數據是不能被無限壓縮的。
計算機中1個bit有兩種狀態,0或者1。1個大小為n個bit的文件,包含了2^n種不同的0和1的組合順序。假如說有一種壓縮算法,壓縮率可以達到50%。那么壓縮后的文件,大小為n/2個bit,只能包含2 ^(n/2)種0和1的組合順序,是無法將壓縮前的2^n種排列表示完整的。
本質上,壓縮的原理其實就是用更精簡的字符串去描述復雜的字符串。字符串的規律性越強,壓縮的效果越好。
“CCCCCCCC”可以用”8C”來表示,一下子就縮短了6個字符。
相應的,內容越是隨機沒有規律,越是難被壓縮,例如隨機的字符串”LFSDHFA156″、π、還有上面例子里”CCCCCCCC”壓縮后的”8C”。
在英文里,常用的單詞都是比較短小的,例如I、you、a、one、two等,而不怎么常用的單詞,都是比較長的,例如biotransformation。我們背這些長的單詞的時候,往往會把它分解成簡單的一些單詞的組合”bio”+”transform”+”tion”這樣子來背。其實和數據壓縮是大同小異的。順便說下,這種把常用的單詞用盡量少的字母來表達的方法,就是信息學中大名鼎鼎的「哈夫曼編碼」的基本原理。
說了這么多,其實就是想解釋下,數據壓縮只不過是把海綿中的水擠壓出來,再怎么用力,都無法把海綿都擠的消失。
搬運自我的技術博客:http://www.cc-lab.cn/compression/
總結
- 上一篇: 浅谈云计算与超融合的区别和联系
- 下一篇: NXP i.MX 8M Mini 开发板