歡迎來到數據壓縮的世界!

你有沒有想過,為什麼你能在大約幾秒鐘內就將一張高畫質照片傳送給朋友,或者為什麼一個小小的智慧型手機竟然能存下成千上萬首歌?這背後的秘密就是數據壓縮 (Data Compression)。在本章中,我們將一起探索電腦如何「縮小」數據,從而節省空間和時間。如果剛開始覺得這些概念有點技術性,不用擔心——我們會一步一步為你拆解!

什麼是數據壓縮?

數據壓縮是指縮減檔案大小的過程。它透過使用演算法,將相同的資訊封裝成更少的位元 (bits)

為什麼我們需要它?

我們壓縮數據主要有兩個原因:

1. 儲存空間:檔案越小,佔用的硬碟或手機記憶體空間就越少。
2. 傳輸速度:較小的檔案在網路上傳輸的速度更快。這意味著網頁載入速度更快,影片串流播放時也不容易頻繁緩衝 (buffering)。

比喻:想像一個睡袋。當它攤開時,會佔據很大的空間;但當你把它塞進小小的壓縮袋時,雖然還是同一個睡袋,但攜帶和儲存起來就方便多了!

快速複習:為什麼要壓縮?

• 使用更少的儲存空間
• 下載或透過網路傳送的速度更快
• 允許在裝置上儲存更多數據。

行程長度編碼 (Run Length Encoding, RLE)

行程長度編碼 (RLE) 是一種簡單的壓縮形式,透過尋找連續且相同的數據來運作。它不會儲存每一筆數據,而是儲存數據值以及該數據重複出現的次數

運作原理

想像一個簡單黑白圖像中的一行像素,其中 0 代表白色,1 代表黑色:
原始數據:0000011100000011

不進行壓縮的話,這需要 16 個位元。使用 RLE,我們將它們分組為頻率/數據對 (frequency/data pairs)

• 五個 0
• 三個 1
• 六個 0
• 兩個 1

壓縮後的版本變為:5 0 3 1 6 0 2 1

避免常見錯誤:永遠記住順序!通常是計數(頻率)在前,數值在後。千萬別弄混了,否則電腦將無法還原成原始檔案!

重點總結

當數據包含大量重複模式時(例如簡單的圖示或大面積相同顏色的圖像),RLE 的效果最好。

哈夫曼編碼 (Huffman Coding)

哈夫曼編碼是一種更聰明的數據壓縮方式,特別適合處理文字。它是基於頻率 (frequency),也就是字元出現的頻率來進行編碼。

核心概念

在標準的 ASCII 中,無論字元出現頻率如何,每個字元都固定使用 7 或 8 個位元。而在哈夫曼編碼中,我們會為出現頻率高的字元(如 'e' 或 '空白')分配較短的二進位代碼,而為出現頻率低的字元(如 'z' 或 'q')分配較長的代碼

解讀哈夫曼樹 (Huffman Tree)

要找到某個字元的二進位代碼,你需要從哈夫曼樹的頂部(根節點,root)往下追蹤到該字元。

• 每向左 (Left) 走一次,就加上一個 0
• 每向右 (Right) 走一次,就加上一個 1

例子:如果你向左走,再向右走,最後向左走到達字母 'A',那麼它的哈夫曼代碼就是 010

你知道嗎?由於常用字母的代碼非常短(例如只有 '0' 或 '10'),整個句子所使用的位元總數會遠低於每個字母都用 8 個位元的情況!

計算壓縮節省量

在考試中,你可能會被要求比較未壓縮數據 (ASCII) 與哈夫曼壓縮數據的差異。

逐步計算:位元比較

1. 未壓縮:計算字串中的字元總數,然後乘以 8(假設使用 8-bit ASCII)。
公式:\( \text{總位元數} = \text{字元數} \times 8 \)

2. 哈夫曼壓縮:使用提供的樹狀圖找出每個字母的代碼。計算每個代碼的位元數並將它們加總。

3. 節省量:用未壓縮的總數減去壓縮後的總數。

例子:
使用 8-bit ASCII 儲存單字 "BEE":
\( 3 \text{ 個字元} \times 8 \text{ 位元} = 24 \text{ 位元} \)。
若使用哈夫曼編碼,假設 'B' 是 11,'E' 是 0
B (11) + E (0) + E (0) = 4 位元
總節省:20 個位元!

快速複習盒

ASCII:固定長度(通常每個字元 8 個位元)。
哈夫曼:可變長度(常用字元 = 短代碼;罕見字元 = 長代碼)。
RLE:頻率/數據對(例如 4 個 'A' 變成 4 A)。

關鍵詞彙總結

數據壓縮 (Data Compression):縮減檔案大小以節省空間或傳輸時間的方法。
行程長度編碼 (Run Length Encoding, RLE):一種透過「計數+數值」來取代重複數據的壓縮方法。
哈夫曼編碼 (Huffman Coding):一種利用樹狀結構,為高頻率字元分配較短二進位代碼的方法。
頻率 (Frequency):特定數據或字元出現的次數。
位元 (Bit):電腦中最小的數據單位(0 或 1)。

如果哈夫曼樹剛開始看起來像蜘蛛網一樣複雜,不用擔心!只要記住:從頂部開始,沿著分支走向你需要找的字母就可以了。你一定能學好的!