JPEG格式在圖片上效果良好,但對(duì)音頻和音樂(lè)文件呢?這些文件也能使用有損壓縮去壓縮,而且使用了相同的基本思想:拋棄對(duì)成品影響很小的信息。MP3和AAC等流行音樂(lè)壓縮格式通常使用和JPEG一樣的高級(jí)方法。音頻也會(huì)被劃分成塊,每個(gè)塊都會(huì)被單獨(dú)壓縮。在JPEG中,以特定方式變化的塊能用少量數(shù)字形容。不過(guò),音頻壓縮格式也能利用與人耳有關(guān)的已知事實(shí)。特別是,有些種類(lèi)的聲音對(duì)人只有很小的影響或沒(méi)有影響,因此壓縮算法能在不降低輸出質(zhì)量的情況下消除這些聲音。
壓縮算法的起源
本章描述的同前把戲——用于ZIP文件中的壓縮方法之一——以L(fǎng)Z77算法為計(jì)算機(jī)科學(xué)家所熟知。這一算法由兩位以色列計(jì)算機(jī)科學(xué)家亞伯拉罕·倫佩爾(Abraham Lempel)以及雅各布·齊夫(Jacob Ziv)于1977年發(fā)表。
不過(guò),要追溯壓縮算法的起源,我們需要把科學(xué)史向前推30年。我們已經(jīng)了解了克勞德·香農(nóng),那位以其1948年論文創(chuàng)建信息理論領(lǐng)域的貝爾實(shí)驗(yàn)室科學(xué)家。香農(nóng)是糾錯(cuò)碼故事中(第五章)的兩位主要英雄之一,但他以及他于1948年發(fā)表的論文在壓縮算法的出現(xiàn)上也扮演了重要角色。
這并非偶然。事實(shí)上,糾錯(cuò)碼和壓縮算法是同一枚硬幣的兩面。兩者都來(lái)自冗余的想法,我們?cè)诘谖逭略敿?xì)介紹了冗余的概念。如果一個(gè)文件有冗余,它就比必要的長(zhǎng)度長(zhǎng)。這里重復(fù)一個(gè)第五章的簡(jiǎn)單例子,文件可以使用單詞“.ve”來(lái)代替數(shù)字“5”。那樣的話(huà),像“.vq”這樣的錯(cuò)誤就能被輕易識(shí)別和糾正。因此,糾錯(cuò)碼能被視為向消息或文件中添加冗余的原則性方法。
壓縮算法正好相反:它們會(huì)從消息或文件中移除冗余。很容易想象一個(gè)壓縮算法會(huì)注意到文件中經(jīng)常使用單詞“.ve”,并用一個(gè)更短的符號(hào)取代它(甚至有可能是符號(hào)“5”),正好反轉(zhuǎn)了糾錯(cuò)碼過(guò)程。在現(xiàn)實(shí)中,壓縮和糾錯(cuò)并不會(huì)像這樣彼此抵消。相反,好的壓縮算法會(huì)移除低效冗余,而糾錯(cuò)編碼會(huì)增加另一種更高效的冗余。因此,首先壓縮一條信息,再往里面添加一些糾錯(cuò)碼非常常見(jiàn)。
再說(shuō)回香農(nóng),他于1948年發(fā)明的重要論文除了許多卓越貢獻(xiàn)之外,還包含對(duì)最早期壓縮技術(shù)之一的描述。麻省理工學(xué)院教授羅伯特·法諾(Robert Fano)大約在同時(shí)發(fā)明了這一技術(shù),這一方法現(xiàn)在以香農(nóng)—法諾編碼(Shannon-Fano coding)命名。事實(shí)上,香農(nóng)—法諾編碼是一種實(shí)施更短符號(hào)把戲的特殊方法,我們?cè)诒菊虑懊婷枋隽烁谭?hào)把戲。我們很快就會(huì)知道,香農(nóng)—法諾編碼很快就被另一種算法取代,但這一方法非常有效,并存活到了今天,成為ZIP文件格式的可選壓縮方法之一。
香農(nóng)和法諾都意識(shí)到,盡管他們的方法都既實(shí)用又高效,但卻不是最好的算法:香農(nóng)通過(guò)算術(shù)證明了肯定有更好的壓縮技術(shù)存在,但還未找到實(shí)現(xiàn)它們的方法。同時(shí),法諾在麻省理工教授一門(mén)信息理論的研究生課程,他將實(shí)現(xiàn)優(yōu)化壓縮的問(wèn)題作為該課程學(xué)期論文的可選項(xiàng)之一。出人意料的是,法諾的一位學(xué)生解決了這一問(wèn)題,得到了一種針對(duì)每個(gè)符號(hào)取得最佳可能壓縮的方法。這名學(xué)生就是大衛(wèi)·霍夫曼,他的技術(shù)——現(xiàn)在以霍夫曼編碼來(lái)命名——?jiǎng)t是更短符號(hào)把戲的另一個(gè)例子。霍夫曼編碼仍然是一種基礎(chǔ)壓縮算法,被廣泛用于通信和數(shù)據(jù)存儲(chǔ)系統(tǒng)。