文件壓縮的原理


文件壓縮原理的簡單理解、、、

為什么會寫這篇文章,因為Linux中的壓縮和Windows中的壓縮有些區別,可能理解一下壓縮原理,能更好的去使用Linux中的壓縮

先貼一下Linux中壓縮文件的數學公式:摘自香農論文:《通訊的數學原理》

----------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------

我在博客園看到有人寫了壓縮的原理解釋:寫的超級長,看完之后我已經崩潰了,那篇文章我記得是有90個推薦的

文章的鏈接:https://www.cnblogs.com/esingchan/p/3958962.html

具體文章寫的怎么樣我不做評論,有興趣的話可以點一下上個面的鏈接:過去看一下

----------------------

 

壓縮和解壓技術出現的可能和原因:

一個字節有 0 - 255 共 256 種可能的取值,三個字節有 256 * 256 * 256 共一千六百多萬種可能的情況,更長的短語取值的可能情況以指數方式增長,出現重復的概率似乎極低,實則不然,各種類型的數據都有出現重復的傾向,一篇論文中,為數不多的術語傾向於重復出現;一篇小說,人名和地名會重復出現;一張上下漸變的背景圖片,水平方向上的像素會重復出現;程序的源文件中,語法關鍵字會重復出現(我們寫程序時,多少次前后copy、paste?),以幾十 K 為單位的非壓縮格式的數據中,傾向於大量出現短語式的重復。經過上面提到的方式進行壓縮后,短語式重復的傾向被完全破壞,所以在壓縮的結果上進行第二次短語式壓縮一般是沒有效果的。

-------------
解壓縮(Decompression)是壓縮的反過程,是將一個通過軟件壓縮的文檔、文件等各種東西恢復到壓縮之前的樣子。
計算機處理的信息是以二進制數的形式表示的,因此壓縮軟件就是把二進制信息中相同的字符串以特殊字符標記來達到壓縮的目的。

壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須准確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar
壓縮軟件(compression software)
壓縮后所生成的文件稱為壓縮包(archive)

 

壓縮后的文件內容包括這些東西(最簡單的):規則表+內容+其他東西,解壓時用規則表去套規則內容,比如規則表規定A=I LOVE YOU,那么就把內容中的所有A替換為I LOVE YOU(就像word的字符替換),如果文件重復性差,那么就沒有替換的,算法差的話,規則表說不定比原來的所有內容還大,這樣反而得不償失了。
比如一個A-Z的字母表,在標准ZIP壓縮后壓縮率為107%!而一個26個A的文件壓縮率就是15%。
-------------------
壓縮工具只是根據文件保存字符的規律生成一套規則,然后用規則去保存源文件,解壓就是用規則還原文件
------------
在通信原理中介紹數據壓縮的時候,往往是從信息論的角度出發,引出香農所定義的熵的概念,

比如這句話:生,容易。活,容易。生活,不容易。
壓縮原理就是 【通過尋找其中的規律,簡化數字的排列】。
例如:
有字典列表:
00=Chinese
01=People
02=China
源文本:I am a Chinese people,I am from China 壓縮后的編碼為:I am a 00 01,I am from 02。壓縮編碼后的長度顯著縮小,
---------------

常見的一些壓縮算法:

RLE(Run Length Encoding)

是一個針對無損壓縮的非常簡單的算法。它用重復字節和重復的次數來簡單描述來代替重復的字節。
-------------
固定位長算法(Fixed Bit Length Packing)

這種算法是把文本用需要的最少的位來進行壓縮編碼。
-------------------
霍夫曼編碼(Huffman Encoding)

哈夫曼編碼是無損壓縮當中最好的方法。它使用預先二進制描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。
-----------------
Lempel-Ziv (LZ77)
LZ77算法的壓縮原理

如果文件中有兩塊內容相同的話,那么只要知道前一塊的位置和大小,我們就可以確定后一塊的內容。所以我們可以用(兩者之間的距離,相同內容的長度)這樣一對信息,來替換后一塊內容。由於(兩者之間的距離,相同內容的長度)這一對信息的大小,小於被替換內容的大小,所以文件得到了壓縮。
--------------------------

關於壓縮形象的解釋:
香農的信息理論,任何一個文件被無損壓縮后的結果不可能小於其 熵 ,
如果一個文件有20多個G的大小,但是其信息熵只有20多M,則實現一個1000倍的壓縮是完全可能的,一個文件如果雖然只有100M,但是其信息熵卻高達90M,則這樣的文件是無論如何也不可能被無損壓縮至20M大小的。

壓縮就是把原文件通過重新編碼成另一種文件,就像我們生活中的速記法,用一個符號就能代表一句話,回家后再把符號還原回原文!
那么一百句話我只要十個符號就能表示,是不是就壓縮了?
壓縮后的文件也是,當你解壓時就按這種壓縮編碼還原回原文件!
不同的壓縮軟件的編碼都不一樣,所以壓縮比也不一樣。


知乎上的一個笑話:老師說,回去把課文抄一千遍,結果第二天你交上去十幾萬字的作業,外星人看了后驚嘆道,老師說的九個字竟然包含了這么多信息,壓縮比太驚人了。
------------------------

 關於香農:

比特(bit)這個單位,就是他發明的,用二進制存儲信息也是他的貢獻。
8歲,他就經常把姐姐的作業搶過來做,不要問他會不會這種挑戰智商的問題,因為他從沒做錯過一道題,並且在他的順手輔導之下,最后他姐姐成了數學系的教授。

除此之外,他還喜歡機械制作,在同齡人還都在玩兒泥巴的時候,他已經DIY了很多小機械;在大家伙都忙着在校園里為那么點微不足道的邂逅臉紅心跳的時候,這個哥已經能自己徒手制作電動船、電報機、各種機械動物了。。。注意這個時候,他還沒上大學。

----------------
理科生的思維+工科生的動手能力+爆表的思維,注定了他非池中之物,所以,他不出意料的進了美國最牛X的理工科學校——麻省理工學院(MIT)。
---------------
他碩士畢業那一年,他把19世紀中葉英國數學家——喬治·布爾的布爾代數和電子電路中開關和繼電器的工作原理,獨創性地結合在一起,直接炸出了一個新的學科:信息學。

他告訴我們:這個世界所有的信息都可以用0和1來表示。

看到0和1你是不是第一個想到了計算機沒錯是的,
科學家們發現一個規律,發明家們發明一個產品,很多時候都是特定條件和需求下的產物,就好比牛頓被蘋果砸中發現萬有引力定律,愛迪生發明燈泡,可這個哥明顯是因其強大的智商,超前的思維,顛覆了那個時代。

1943年,他在飯桌上跟人工智能之父阿蘭·圖靈說過這樣一句話:“我不僅僅滿足於向這台“大腦”里輸入數據,還希望把文化的東西灌輸進去。”當時,人工智能之父就被震驚了。


-----------------
1948年香農在Bell System Technical Journal上發表了《A Mathematical Theory of Communication 》(通訊的數學原理)

提出了熵(entropy)的概念
他證明熵與信息內容的不確定程度有等價關系。熵曾經是波爾茲曼在熱力學第二定律引入的概念,我們可以把它理解為分子運動的混亂度。信息熵也有類似意義,例如在中文信息處理時,漢字的靜態平均信息熵比較大,中文是9.65比特,英文是4.03比特。這表明中文的復雜程度高於英文,反映了中文詞義豐富、行文簡練,但處理難度也大。信息熵大,意味着不確定性也大。因此我們應該深入研究,以尋求中文信息處理的深層突破。不能盲目認為漢字是世界上最優美的文字,從而引申出漢字最容易處理的錯誤結論。

1948年香農長達數十頁的論文“通信的數學理論”成了信息論正式誕生的里程碑。在他的通信數學模型中,清楚地提出信息的度量問題,他把哈特利的公式擴大到概率pi不同的情況,得到了著名的計算信息熵H的公式:

計算信息熵H的公式

----------------------------------------------

 

-----------------------------------------------

如果計算中的對數log是以2為底的,那么計算出來的信息熵就以比特(bit)為單位。今天在計算機和通信中廣泛使用的字節(Byte)、KB、MB、GB等詞都是從比特演化而來。“比特”的出現標志着人類知道了如何計量信息量。香農的信息論為明確什么是信息量概念作出決定性的貢獻。

------------
香農僅僅從數學的角度解釋信息,常常被人所詬病。認為他的信息論是狹隘的。對信息的詮釋過於狹窄。我想作為數學家的香農,他也無可奈何。畢竟數學是不是科學,而是科學的工具,具有高度的抽象性;要想讓具有高度抽象的數學負荷內容,難免免為其難。
‘信息’這個詞在信息論的一般領域已經由各位作者賦予不同的意義。至少,這些意義很可能在某些應用領域充分證明是有用的,需要進一步的研究和做出永久性的承認。幾乎不能指望一個單一的關於信息的概念能夠令人滿意地對一般領域的各種應用負責。”


香農為了避免繼續被“追殺”,干脆對他提出的“信息”的概念放任自流了。別的領域愛怎么用就怎么用吧,只要你們能自圓其說。所以直到今天,信息無論是在哪個領域也沒有一個定於一尊的定義!實際上,信息是一個不能被定義的“元概念”。頗有點兒像奧古斯丁(A. Augustinus)關於“時間”的說法。在其《懺悔錄》卷十一中他說:“什么是時間?……如果沒人問我,我知道它是什么。如果我想對他解釋什么是時間,我卻不知道了。”信息是否也和時間一樣呢?
---------------------------------
熵”是信息論中最基本最重要的一個概念,香農最初想用“信息” (information) 來表達這一概念,但這個詞當時已經被用濫了。香農便放棄用信息這個詞。馮·諾依曼建議香農用“熵”;並給出二個理由:一是香農原本想用的“不確定性”(uncertainty)這個概念已經用於統計力學,二是沒人知道“熵”倒底是什么,用它不會引起爭論。

漢語中本無“熵”字,1923年德國物理學家普朗克(M. Planck)來華講學時用到entropy這個詞,由於entropy在表達形式上是兩個量相除的商,我國著名物理學家胡剛復教授在現場口譯時,把這個詞翻譯成“商”字加“火”旁創造了漢語的一個新術語“熵”。

最終,香農采納了馮·諾依曼的建議,在信息論中提出了“信息熵”的概念,解決了信息的量化度量問題。一條信息的信息量大小和它的不確定性有直接關系。例如,我們要弄清楚一件很不確定的事情,或者我們一無所知的事情,就需要大量的信息。相反,如果我們對某件事已經有了較多的了解,就無需太多的信息就夠了。所以,從信息論的角度看,信息量的度量等於不確定性的多少。信息熵的數學表達式很簡潔:

信息熵的表達式 

------------------------------------------------------------

-----------------------------------------------------------

 

 

 

---------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM