正文

數(shù)據(jù)壓縮——有益無害(3)

改變未來的九大算法 作者:(美)約翰·麥考密克


你也許明白為什么傳真機能利用行程長度編碼。從定義上來說,傳真是黑白文件,文件會被轉(zhuǎn)換成許多個點,每個點都是非黑即白。當你按順序閱讀這些點(從左到右,從上到下),你會遇到大段白點(背景)以及小段黑點(前景文本或筆跡)。這讓使用行程長度編碼變得非常有效。但正如之前所提到的,只有特定類型的數(shù)據(jù)具有這一特點。

于是,計算機科學(xué)家們發(fā)明了一系列更成熟的把戲,這些把戲使用的基本思想都相同(尋找重復(fù)并高效地描述它們),但即便重復(fù)部分不相鄰也效果良好。在這里,我們只會研究其中的兩種把戲:同前把戲(same-as-earlier trick)和更短符號把戲(shorter-symbol trick)。你只需要這兩個把戲就能生成ZIP文件,而ZIP文件格式是個人電腦上壓縮文件最流行的格式。因此,一旦你理解了這兩個把戲背后的基本思想,你也就理解了計算機在大部分時間里是如何運用壓縮的。

同前把戲

想象這就是你要處理的可怕任務(wù),通過電話向某人口述如下數(shù)據(jù):

VJGDNQMYLH-KW-VJGDNQMYLH-ADXSGF-OVJGDNQMYLH-ADXSGF-VJGDNQMYLH-EW-ADXSGF

這里有63個字母需要溝通(順便說一句,我們忽略了破折號,加入它們只是為了讓數(shù)據(jù)更容易閱讀)。和每次一個字母地口述全部63個字母相比,我們有更好的辦法嗎?第一步也許是去識別數(shù)據(jù)中大量的重復(fù)部分。事實上,大多數(shù)被破折號分開的“塊”都至少重復(fù)了一次。因此,在口述這份數(shù)據(jù)時,你可以通過“這部分和我之前告訴你的某個部分一樣”節(jié)省大量力氣。更精確點講,你要講是多久前說的,還要講重復(fù)的部分有多長——也許是“往回數(shù)27個字母,然后復(fù)制從那一點開始往下的8個字母”。

讓我們來看看這一策略在現(xiàn)實中效果如何。最開始的12個字母沒有重復(fù)部分,你沒有其他選擇,只能按字母逐個口述:“V、J、G、D、N、Q、M、Y、L、H、K、W”。但接下來的10個字母和之前的一些字母相同,因此你可以說“back 12,copy 10”(數(shù)回12個字母,抄到第10個字母)。再下面7個字母是新出現(xiàn)的,按字母逐個口述:“A、D、X、S、G、F、O”。但之后的16個字母是個大的重復(fù)部分,因此你可以說“back 17,copy 16”(數(shù)回17個字母,抄到第16個字母)。接下來的10個字母也是之前的重復(fù)部分,因此“back 16, copy 10” (數(shù)回16個字母,抄到第10個字母)就可以了。再接下來的兩個字母沒有重復(fù),需要逐個口述為“E、W”。最后的6個字母是之前的重復(fù),可以通過“back 18,copy 6”(數(shù)回18個字母,抄到第6個字母)溝通。


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號