正文

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

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


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

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

同前把戲

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

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

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

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


上一章目錄下一章

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