爲何會寫這篇文章,由於Linux中的壓縮和Windows中的壓縮有些區別,可能理解一下壓縮原理,能更好的去使用Linux中的壓縮html
先貼一下Linux中壓縮文件的數學公式:摘自香農論文:《通信的數學原理》算法
----------------------------------------------------------------------------------------------工具
----------------------------------------------------------------------------------------------
動畫
我在博客園看到有人寫了壓縮的原理解釋:寫的超級長,看完以後我已經崩潰了,那篇文章我記得是有90個推薦的編碼
文章的連接:http://www.javashuo.com/article/p-qsxdfanl-dg.html人工智能
具體文章寫的怎麼樣我不作評論,有興趣的話能夠點一下上個面的連接:過去看一下spa
----------------------翻譯
一個字節有 0 - 255 共 256 種可能的取值,三個字節有 256 * 256 * 256 共一千六百多萬種可能的狀況,更長的短語取值的可能狀況以指數方式增加,出現重複的機率彷佛極低,實則否則,各類類型的數據都有出現重複的傾向,一篇論文中,爲數很少的術語傾向於重複出現;一篇小說,人名和地名會重複出現;一張上下漸變的背景圖片,水平方向上的像素會重複出現;程序的源文件中,語法關鍵字會重複出現(咱們寫程序時,多少次先後copy、paste?),以幾十 K 爲單位的非壓縮格式的數據中,傾向於大量出現短語式的重複。通過上面提到的方式進行壓縮後,短語式重複的傾向被徹底破壞,因此在壓縮的結果上進行第二次短語式壓縮通常是沒有效果的。設計
-------------
解壓縮(Decompression)是壓縮的反過程,是將一個經過軟件壓縮的文檔、文件等各類東西恢復到壓縮以前的樣子。
計算機處理的信息是以二進制數的形式表示的,所以壓縮軟件就是把二進制信息中相同的字符串以特殊字符標記來達到壓縮的目的。3d
壓縮能夠分爲有損和無損壓縮兩種。若是丟失個別的數據不會形成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮普遍應用於動畫、聲音和圖像文件中,典型的表明就是影碟文件格式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在表達形式上是兩個量相除的商,我國著名物理學家胡剛復教授在現場口譯時,把這個詞翻譯成「商」字加「火」旁創造了漢語的一個新術語「熵」。
最終,香農採納了馮·諾依曼的建議,在信息論中提出了「信息熵」的概念,解決了信息的量化度量問題。一條信息的信息量大小和它的不肯定性有直接關係。例如,咱們要弄清楚一件很不肯定的事情,或者咱們一無所知的事情,就須要大量的信息。相反,若是咱們對某件事已經有了較多的瞭解,就無需太多的信息就夠了。因此,從信息論的角度看,信息量的度量等於不肯定性的多少。信息熵的數學表達式很簡潔:
信息熵的表達式
------------------------------------------------------------
-----------------------------------------------------------
---------------------