作爲谷歌開發者佈道師,我爲什麼要寫這本通俗的《數據壓縮入門》(一)

“我希望本書能揭開數據壓縮的神祕面紗,爲軟件開發人員學習壓縮算法提供一個起點,同時幫助他們開發出更好的軟件。”

——John Brooks,Blue Shift公司CTO

本文選自《數據壓縮入門》的序言,作者 John Brooks,是 Blue Shift 公司 CTO,他通過對自己經驗的總結,告訴你數據壓縮爲什麼如此重要!

我第一次編程時,連數據壓縮是什麼都不知道,更談不上認識到它的重要性了。幸運的是,我的 Apple II Plus 計算機內存有 0.000 048 GB(約 48 KB),這在 1979 年算是很大的內存了,足夠讓我去探索編程和計算機圖形學。我當時完全沒有意識到程序和數據在後臺是不斷壓縮和解壓縮的,從而減小了它們在內存中的大小。說到這裏,真要感謝 Woz !

有了幾年的編程經驗後,我發現:

  • 數據壓縮需要花費時間並可能會導致軟件變慢;

  • 改變數據的組織結構可以讓數據壓縮得更小;

  • 複雜的數據壓縮算法各式各樣。

這使我意識到壓縮不是一個剛性的黑盒,相反,它是一個靈活的工具,可以極大地影響軟件的質量。我們可以通過以下幾種方式運用壓縮:

  • 改變壓縮算法有可能讓軟件運行得更快;

  • 針對數據的組織結構選擇正確的壓縮算法,可以使數據變得更小;

  • 選擇不匹配的數據組織結構或壓縮算法,可能會導致數據變大或運行變慢。

如今我明白數據壓縮爲什麼重要了。如果數據太大、內存不夠,或者解壓縮太慢,可以稍微改變一下數據的組織結構,以使它更好地適應壓縮算法。比如,我會將數單獨放在一組,字符串放在另一組,爲重複出現的數據類型建表,或者將分數截斷爲整數。如果能讓數據與算法匹配,我就無須去做評估與採用新的壓縮算法這樣的苦差。

後來,我開始做專業的電子遊戲,大部分遊戲數據是由藝術家、設計師和音樂家這樣的非技術人員生成的。結果表明,數學不是他們最喜歡討論的話題,而且他們對改變遊戲數據以便更好地利用我的單向壓縮算法不太感興趣。好吧,既然數據的組織結構無法改善,剩下能做的就是選擇最合適的壓縮算法來與這些“偉大的”藝術數據匹配了。

我調查了各種數據壓縮算法,發現有兩大類很適合電子遊戲數據:

  • 無損方法

    • 去掉重複數據(LZ 算法)

    • 熵壓縮(哈夫曼編碼、算術編碼)

  • 有損方法

    • 降低精度(截斷或降採樣)

    • 圖像 / 視頻壓縮

    • 音頻壓縮

對文本字符串和二進制數據使用 LZ 算法,可以將完全重複的數據壓縮掉。對像素數據使用有損的矢量量化(vector quantization,VQ)算法,可以將像素映射爲調色板。對音頻數據使用有損的降採樣和線性預測編碼(linear predictive coding,LPC)算法,可以減少每秒的二進制位數。如果 CPU 足夠快,前述所有這些壓縮算法的輸出都可以再用無損的哈夫曼算法進行一次額外的統計熵壓縮。

20 世紀八九十年代,我參與制作了大約 30 個遊戲,其中大多數使用的是這些算法,外加簡單的數據構造工具對數據的組織結構進行有限的優化。

但是到了 2000 年左右,情況變得複雜起來。數據生成工具與數據展示和分析工具之間展開了持續的競爭。其結果是軟件性能、存儲大小、網絡擁塞,以及壓縮算法與數據組織結構的有效配對。

這種數據洪流被更大的存儲空間(藍光光盤、TB 級的硬盤以及雲存儲)、更快的多核 CPU、新的無損壓縮算法(如 BWT、ANS 和 PAQ),以及針對圖像、視頻、音頻等數據的有損編解碼器的巨大性能提升部分抵消了。然而,由於數據每年的增長速度太快,相比之下,網絡帶寬的增加、壓縮算法的性能提升以及存儲容量增長的速度就太慢了。

這些因素造成了我們的現狀,這也是本書內容之所以重要的原因。

程序員怎麼才能知道爲數據選擇哪種壓縮算法,以及對數據做什麼樣的改變能使特定的算法表現得更好或更差呢?其實真正有幫助的是對主要的數據壓縮算法進行介紹,指導開發人員從衆多可用的算法中選擇最合適的。大部分開發人員其實並不需要掌握實現這些算法所需要的所有理論和數學細節,他們只要知道這些算法的優缺點,以及在特定場景中怎樣充分利用它們即可。

我很高興在過去的 37 年裏一直在實現和使用不同的數據壓縮算法,並看到它們的發展變化。我希望這本書能揭開數據壓縮的神祕面紗,爲軟件開發人員學習壓縮算法提供一個起點,同時幫助他們開發出更好的軟件。

John Brooks
Blue Shift 公司首席技術官

谷歌開發高手通俗講解

5類數據壓縮算法 

《數據壓縮入門》

[美] 柯爾特·麥克安利斯等 著

王凌雲 譯

5G 時代即將到來,隨之而來的是鋪天蓋地的數據洪流。在 5G 時代成功獲取用戶並提升轉化率,離不開數據壓縮的專業技能。

本書從理論和實踐兩方面入手,面向開發人員講解數據壓縮算法,並幫助開發人員選擇合適的數據壓縮工具。書中通過講解清晰、步驟詳細的示例,將數據壓縮算法化繁爲簡,幫助開發人員做出正確的有關數據壓縮的商業決策,從而實現客戶更多、事業更興、利潤更高。

☟ 一鍵擁有

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章