為什麼不能無限壓縮?
12-30
壓縮文件是減少文件中的二進位數,那不同的壓縮工具的演算法不同,應該文件如果不斷的切換使用壓縮的演算法(軟體)會被無限縮小,為什麼我實踐的時候文件的大小到了一定值之後無論用何種工具或方法都不能將其縮小了?
題主自行實驗的結果揭示了一個道理:壓縮不能不限進行。其實很好理解,我來舉一個例子:在某軍隊,回答問話的只有三種答案:是、不是、不知道,其中「是」的概率比較小,「不知道」的概率比較大。這個軍隊的指揮官深受通信數據量過大的苦惱,想要解決這個問題。一個顯然可行的方法是,讓頻率高的詞長度較短。於是編製了如下對應規則:0-不知道 10-否 11-是。於是信息就被壓縮了。
但是,這樣壓縮有沒有限度呢?我說:我有一種演算法,使得可以用一個bit表達一個回答。你相信嗎?
顯然不可能,因為回答有三種,一個bit至多只能表達兩種狀態。因此,要給回答進行編碼,最長的詞語的編碼至少需要兩個bit。這就是為什麼,聲稱能夠將所有的文件壓縮至一常數大小以內的演算法都是不存在的。進一步,聲稱針對所有的文件,壓縮率(壓縮後的大小比上壓縮前的大小)均低於某常數比例的演算法也是不存在的。請搜索「信息熵」。
我來發一個我初中時候的證明……
假設存在一個壓縮演算法f(x),它對所有的輸入x,輸出長度都不會增加。由於壓縮演算法是可以解壓的,得f(x)是一一映射。
那麼由於對於所有n,記長度不超過n的字元串集合為S(n)。顯然根據前面的假設,易得限定f的定義域到S(n)以後f是從S(n)自身的一一映射。但是又已知f也是S(n-1)到自身的一一映射,可見f在S(n)-S(n-1)上也是一一映射。
因此,任何滿足條件的f,都滿足輸出的長度永遠和輸入相等。
可見題主你的假設是錯的,壓縮軟體的功能並不是「減少文件的二進位數」。一個「對任何輸入都不會增加長度,而對至少一個輸入會減小長度」的壓縮演算法是不存在的。
實際上,現實中的壓縮演算法的工作原理是「對有規律的文件減少長度,對雜亂無章的文件長度不變或者略微增加長度」。可以啊,準備一個無窮大的解壓軟體(帶著一個無窮大的字典),壓縮結果可以逼近均勻分布的熵。
都壓縮成1bit那當然是奢想了。
無限壓縮完了之後呢,壓縮成了1bit,怎麼解壓縮?
如果把壓縮認為是一種映射的話,XX網盤的壓縮率應該秒殺眾多壓縮軟體。就是解壓有點慢。
wifi密碼破解字典解壓28gb。壓縮前十幾兆
壓縮過程是不斷converge到一個極限壓縮狀態的過程。換句話說就是logX(二為底),當X減小時logX減少,但X不斷減小到負無窮,但函數值converge到0。而信息壓縮的極限是由information theory中的求得的,你問的應該是這個intuition吧。
信息熵,先贊占第一坑的人無論如何壓縮,都需要bit去表達信息,換句話說,壓縮,同樣的bit數可以表達更多的信息。無限壓縮,是指1個bit能表達比「真值」更多的信息嗎?再無限,目前計算機能支持0.5bit的概念?等等
我來個自己的解釋吧,不一定準,大家看看就好。
文件都以二進位形式儲存,比如這一段:
…00111111001111…
壓縮後成為:
…2*0 6*1 2*0 4*1…
比之前短了一些如果再進一步壓縮,可能的方式就是把0和1分組記錄並壓縮。
問題在於,這種方式是有一個盡頭的,就是再壓縮的基礎上再壓縮,雖然節約了部分空間,但勢必會在後一個壓縮文件中加入解釋信息,當解釋信息比節約出的空間還多時,壓縮也就走到了盡頭。
完全非專業的回答,請點沒有幫助(?_?)題主,你這個假設成立的條件是,壓縮後的文件大小一定比壓縮前的小,只有這個結論成立,你這個假設成立。但事實很明顯,這個結論是不成立的。
請先了解壓縮的原理就懂了。
因為壓縮其實是令一段信息變得混亂的過程。
而當一段信息的混亂度已經達到最大的時候,那就是不可壓縮的了。推薦閱讀: