壓縮文件演算法
① zip 的壓縮原理與實現
文件壓縮原理
我們使用計算機所做的事情大多都是對文件進行處理。每個文件都會佔用一定的磁碟空間,我們希望一些文件,尤其是暫時不用但又比較重要不能刪除的文件(如備份文件,有點像雞肋呀),盡可能少的佔用磁碟空間。但是,許多文件的存儲格式是比較鬆散的,這樣就浪費了一些寶貴的計算機存儲資源。這時,我們可以藉助壓縮工具解決這個問題,通過對原來的文件進行壓縮處理,使之用更少的磁碟空間保存起來,當需要使用時再進行解壓縮操作,這樣就大大節省了磁碟空間。當你要拷貝許多小文件時,通過壓縮處理可以提高執行效率。如果小文件很多,操作系統要執行頻繁的文件定位操作,需要花費很多的時間。如果先把這些小文件壓縮,變成一個壓縮文件後,再拷貝時就很方便了。由於計算機處理的信息是以二進制數的形式表示的,因此壓縮軟體就是把二進制信息中相同的字元串以特殊字元標記來達到壓縮的目的。為了有助於理解文件壓縮,請您在腦海里想像一幅藍天白雲的圖片。對於成千上萬單調重復的藍色像點而言,與其一個一個定義「藍、藍、藍……」長長的一串顏色,還不如告訴電腦:「從這個位置開始存儲1117個藍色像點」來得簡潔,而且還能大大節約存儲空間。這是一個非常簡單的圖像壓縮的例子。其實,所有的計算機文件歸根結底都是以「1」和「0」的形式存儲的,和藍色像點一樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到「數據無損稠密」的效果。總的來說,壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須准確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。壓縮軟體(compression software)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積只有原來的幾分之一甚至更小。當然,壓縮包已經是另一種文件格式了,如果你想使用其中的數據,首先得用壓縮軟體把數據還原,這個過程稱作解壓縮。常見的壓縮軟體有winzip、winrar等
② 文件壓縮的原理是什麼
電腦里文件都是以二進制儲存的。壓縮原理就是通過特定的演算法,將文件轉化,而轉化以後的文件佔用的空間較小。
舉個簡單得例子(當然這個例子應該有點問題,但是能說明問題):
原始文件:111110000001
演算法:當連續同樣的1或者0的個數超過5個,則將其轉化成XX1或者XX0得形式;如果不超過5個,保持不變。XX是連續的1或者0的個數,如果連續數量較多,XX得位數可以增加。
於是11111可以表示成5個1,寫成二進制就是1011;000000可以表示成6個0,寫成二進制就是1100;而1保持不變。
這樣,轉化以後的文件就變成了101111001
可見,原始文件需要12個存儲位置,而轉化後的文件只需要9個存儲位置。
當然,實際上壓縮得演算法多種多樣,要比這個例子復雜的多。根據文件種類的不同壓縮演算法也經常不同。
③ 壓縮文件跟原文件之間大小比例是多少比如說1.5G的文件壓縮後有多大
這個跟壓縮演算法有關,一般字元文件的壓縮比較高,可以達到50%左右,視頻、音頻、圖像文件,壓縮比一般80%左右。
如果是影音文件1.5g,壓縮後小不了多少,可能是1.3~1.4G。
有的圖像文件如JPG格式的,本來就是帶壓縮的,再用rar等工具壓縮的效果不明顯,如果是BMP文件,壓縮效果更好。
每個文件都由各種不同代碼組成,比如01代碼。
這類文件只有數字0與1組合。壓縮原理就是【通過尋找其中的規律,簡化數字的排列】。
比如:00000110001111111111可以簡化成5個0,2個1,3個0,10個1的排列;100000000000可以簡化成數學的:10^10。
根據香農的信息理論,任何一個文件被無損壓縮後的結果不可能小於其熵(資訊理論)。
換句話說,如果一個文件有20多個G的大小,但是其信息熵只有20多M,則實現一個1000倍的壓縮是完全可能的(比如樓主放出的幾小時全黑視頻);反過來看,一個文件如果雖然只有100M,但是其信息熵卻高達90M,則這樣的文件是無論如何也不可能被無損壓縮至20M大小的。
多說一句,一個文件的信息熵有多少,靠一個公式是完全可以算出來的。所以只要提供任何一個文件,我們都能知道它最小可以被壓縮到多少。
以上說法僅限於無損壓縮,對於有損壓縮來說,壓縮了多少倍皆有可能。
(3)壓縮文件演算法擴展閱讀:
經過壓縮軟體壓縮的文件是壓縮文件,壓縮的原理是把文件的二進制代碼壓縮,把相鄰的0,1代碼減少,比如有000000,可以把它變成6個0的寫法60,來減少該文件的空間。
壓縮文件的基本原理是查找文件內的重復位元組,並建立一個相同位元組的"詞典"文件,並用一個代碼表示,比如在文件里有幾處有一個相同的詞"中華人民共和國"用一個代碼表示並寫入"詞典"文件,這樣就可以達到縮小文件的目的。
其實,所有的計算機文件歸根結底都是以「1」和「0」的形式存儲的,和藍色像點一樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到「數據無損稠密」的效果。總的來說,壓縮可以分為有損和無損壓縮兩種。