網路城邦
RSS Feed Link 部落格聯播

“我愛談天你愛笑”節目,將從2010年4月起增加台中聯播時段,台北聯播時段與頻道亦更改,詳細資訊如下:

桃竹苗地區新竹IC之音FM97.5
   時段:每週三早上8:15~8:45,晚上6:30~7:00(重播)
   網路收聽網址: http://www.ic975.com

台北地區Bravo FM91.3
   時段:每週六下午5:00~5:30
   網路收聽網址:http://tw.myblog.yahoo.com/fm-913

台中地區全國FM106.1
   時段:每週日下午2:30~3:00
   網路收聽網址:http://www.mradio.com.tw

文章數:175
資料的壓縮
知識學習科學 2012/01/07 16:32:44

廣播日期 2009/07/08

上個禮拜我講到語言學家對語言文字結構的研究和分析,很多結果雖然相當簡單,卻不但有趣而且也很有用,今天我就特別從資料壓縮(data compression)這個角度來談。從遠古時代開始,文字的發明,讓我們可以儲存語言的資料;照相機的發明,讓我們可以儲存圖像的資料,按照歷史的記載,照相機是在1839年左右發明的;留聲機的發明,讓我們可以儲存聲音的資料,留聲機是愛迪生在1877年發明的;電影的發明,讓我們可以儲存動畫的資料,電影是在1895年發明的。

有了電腦之後,文字、語言、圖像、聲音、動畫的資料都可以用01來表達,也就可以由電腦來處理,用記憶體來儲存和透過網路來傳送,當我們用01以某一個形式來表達我們的資料的時候,資料壓縮的問題就是可不可以找到另外一個形式用比較少的01來表達這些資料,很明顯地,資料壓縮是一個重要的技術,因為那可以減少儲存空間的需求和減少資料傳送的時間。

資料壓縮的技術可以分成兩大類,一類是不失真的壓縮(lossless compression),一類是失真的壓縮(lossy compression)。不失真的壓縮就是雖然減少了使用的01的數目,但是原來的資料還是完整無缺的,有人馬上的反應是那怎麼可能?天下沒有白吃的午餐,答案是那是可能的,因為原來的表達形式不見得是最有效率的形式,因此可以有改進的地方,在下面我們會看到好些例子。失真的壓縮就是因為減少了使用的01的數目,因此原來的資料的一部份就會消失,但是如果消失的部份並不是那麼重要的話,也倒是一個值得考量的交換,在下面我們也會看到一些例子。

我要講的第一個例子,十九世紀電報的發明開始,工程師已經訂定了一個規格,用一連串的501來代表英文裡的字母abcd…,一連串的501有三十二個不同的組合,對26個英文字母是剛剛足夠了,但是為了大寫和小寫的區別再加上標點符號等等,在1960年代訂定的到現在大家還很熟悉的ASCIIAmerican Standard Code for Information Interchange)規格,使用一連串701來代表英文字母和標點符號,一連串701有一百二十八個不同的組合,也是剛剛足夠了。

因此,一篇有1000個字母和標點符號的文件就要用700001來表達,這些01的資料有沒有不失真的壓縮的可能呢?答案是可能的。語言學家分析英文26個字母在英文裡使用的頻率,e是最常用的字母,頻率是12t是其次9a8,接下來是oin;在另一個極端,z用得最少0.07g0.09x0.1,因此,如果我們不硬性地用一連串701來代表每一個字母,我們可以用比較少的01,例如一連串5個或者601來代表比較常用的字母,用比較多的01,例如一連串8個或者901來代表比較不常用的字母,那麼平均下來可能不必用到700001,那就達到壓縮的目的了。

在這裡讓我交代一些技術上的問題,如果我們硬性地用一連串701來代表每一個字母,那麼當我們接收到轉送過來的01的時候,我們只要把每701切開來就對了,但是,如果不同的字母用不同數目的01來代表的時候,我們應該怎樣把傳送過來的01正確的切開來呢?還有,常用的字母用比較少的01,不用常的字母用比較多的01來表達,“常用”和“不常用”,“比較多”和“比較少”這些觀念都可以精準地量化,在資訊科學裡霍夫曼樹(Huffman Tree)這個方法就都回答了這兩個問題。

在十九世紀電報通訊技術發明的時候,英文字母是用一連串短點(Dot)和長畫(Dash)來代表的,例如e用點(•)來代表,i用點點(••)來代表,a用點畫(•—)來代表,g用畫畫點(——•)來代表,也符合了常用的字母用比較短的訊號來代表的觀念。

這個例子也指出了資料壓縮裡一個重要的觀念,那就是壓縮的效率是和資料的內容有關的。當我們傳送一份英文文件的時候,上面講的壓縮方法是相當有效的,但是如果我們傳送是一份閩南語羅馬字拼音的文件,那麼abcde的使用頻率可能和英文不同,上面講的壓縮方法,效率可能不會那麼高,甚至可能適得其反,增加了使用的01的數目了。

第二個我要講的例子,使用相似的觀念,那就是常用的字和詞彙用比較精簡的形式來表達,以達到資料壓縮的目的。用過微軟視窗作系統的聽眾都知道「Winzip」是一個常用的資料壓縮的工具,Winzip和許多其他的壓縮工具的基本觀念是:每一個文件都會有用得比較多的字和詞彙,譬如說一份有關股票市場的報告,“買超”、“賣超”、“漲停板”、“跌停板”這些詞會重覆出現,一份有關能源的報告,“節能”、“省碳”、“替代能源”這些詞會重覆出現,所以,如果對每一份文件,我們先製作一本字典,通常這本字典有幾千個在這份文件裡出現得比較多的字和詞,在字典裡這些字和詞有一個相對的數字代號,當字典裡的一個詞在文件裡出現的時候,例如“漲停板”,我們不必把“漲停板”三個字傳送出去,而是把它在字典中的數字代號譬如說“168傳送出去就可以,這也是不失真的資料壓縮。

在這裡讓我交代幾個技術問題,第一、在傳送那一端怎樣把這部字典建立起來,需不需要先把整個文件先瀏覽一遍?答案是不需要,這部字典是邊傳送邊建立的。第二、需不需要把在傳送端建立起來的字典單獨的傳送到接收端,答案是不需要,這部字典是在接收端邊接收邊建立的。第三、這部字典可以在傳送的過程中動態地更新。有興趣的聽眾可以去看看一個叫做Lempel-Ziv的壓縮演算法,那是這些觀念的理論基礎。當然根據這些觀念製作出來資料壓縮軟體,有很多聰明、巧妙的細節以達到迅速和有效的目的,我在這裡就不講了。

我要講的第三個資料壓縮的方法叫做連續長度編碼法(Run-Length Encoding)。譬如說我們要傳送0111000001,我們可以直接傳送一個訊號0111000001,也可以傳送一個訊號(10)(31)(50)(11),我們不直接傳送111而傳送(31),不直接傳送00000而傳送(50),這可能是多費力氣增加了要傳送的訊號的長度,但是如果我們要傳送(10)(151)(320)(891),那就比直接傳送0111111….等等來得有效率了。當我們傳送一張圖像的時候,我們會用0來代表白色,1代表黑色,如果圖裡有一大片白色的空白或者一大片黑色的背景的時候,那就是一長串的0和一長串的1,那麼連續長度編碼就是一個有效的資料壓縮的方法了。

我要講的第四個資料壓縮的方法叫做差額編碼(Delta Encoding)。例如我們要把班上的學生考試的成績紀錄下來,我們可以寫97 93 95 86….,但是我們也可以寫97-4+2-9,表示第一個學生成績是97,第二個學生的成績是第一個學生的成績-4等於93,第三個學生的成績是第二個學生的成績+2等於95,因為學生的成績彼此之間往往差異並不大,差額編碼可以有助於資料的壓縮。當我們傳送動畫裡一連串的畫面的時候,例如電影一秒鐘有大約三十張畫面,所以兩張畫面之間的差異是很少的,因此我們可以傳送第一張畫面,然後傳送第二張畫面和第一張畫面之間的差異,第三張畫面和第二張畫面之間的差異,那就可以把第二張畫面從第一張畫面還原,第三張畫面從第二張畫面還原了,也就達到資料壓縮的目的了。

最後,讓我講一個失真資料壓縮的例子。音樂裡會有不同頻率的聲音,如果,某一個頻率的强度很大,另外一個頻率的强度很小,即使我們把這個强度小的頻率拿掉,我們的耳朵是分辨不出來的,使用MP3的形式來儲存和傳送的音樂,就是根據這個原理來作資料壓縮,這些被拿掉的頻率是無法再還原。

在文學裡,也有許多資料壓縮的例子,正體字和相對的簡體字,可以看成資料壓縮的例子,灰塵的塵,在簡體字裡寫成「尘」,一個小字下面一個土字,既減少了筆劃,小的土也還是塵的意思;太陽的陽字,在簡體字裡是「阳」,耳朵旁加一個日字,都可以說是不失真的壓縮的例子。至於把乾燥的「乾」、能幹的「幹」和干戈的「干」字都寫成「干」,那就是失真的壓縮了。

有人讀過《三國演義》、《西遊記》的原著,也有人只看過它們連環圖版,連環畫是原著失真的壓縮版。被稱為中國文學四大奇書的《金瓶梅》,多年以來在市面上流通的版本都把原著裡被認為不符合社會道德標準的段落刪掉,這就是所謂「潔本」,清潔的版本,潔本裡很多地方就有括弧以下刪去三百五十二字這種註解,至於潔本是原本的不失真壓縮版?還是失真壓縮版呢?那倒是見仁見智了。中國有名的小說家賈平凹在1993年出版的小說《廢都》裡也跟潔本《金瓶梅》相似,有許多括弧以下刪去三百五十二字這種註解。

唐朝詩人杜牧有一首題目〈清明〉的七言絕句:

清明時節雨紛紛,

路上行人欲斷魂,

借問酒家何處有,

牧童遙指杏花村。

有人說這首詩可以壓縮一下:清明時節雨紛紛,只是講下雨,是不是清明沒有關係,所以「清明」兩個字可以刪掉。路上行人欲斷魂,行人當然是在路上,難道在家不成?所以「路上」兩個字可以刪掉。借問酒家何處有,明明是問一個問題,「借問」兩個字是多餘的,也可以刪掉。牧童遙指杏花村,這個問題的答案是杏花村,誰告訴你這個答案無關重要,所以「牧童」兩個字也可以刪掉。杜牧這首詩的壓縮版,就是一首五言絕句:

時節雨紛紛,

行人欲斷魂,

酒家何處有,

遙指杏花村。

唐朝詩人王之渙有一首題目〈出塞〉的七言絕句:

黃河遠上白雲間,

一片孤城萬仞山。

羌笛何須怨楊柳,

春風不度玉門關。

據說乾隆皇帝有一次吩咐他手下的一位大臣把這首詩寫在扇面上,這位大臣不小心把黃河遠上白雲間這一句裡的「間」字寫漏掉了,二十八個字的一首詩被壓縮成二十七個字,皇帝正要發怒的時候,這位大臣不慌不忙地解釋,我寫的不是每句七個字的出塞詩而是長短句的出塞詞,這首詞是這樣唸:

黃河遠上,白雲一片,孤城萬仞山。

羌笛何須怨,楊柳春風,不度玉門關。

最新創作
資料的壓縮
2012/01/07 16:32:44 |瀏覽 2293 回應 4 推薦 29 引用 0
廣播日期 2009/07/08上個禮拜我講到語言學家對語言文字結構的研究和分析,很多結果雖然相當簡單,卻不但有趣而且也很有用,今天我就特別從資料壓縮(data compression)這個角度來談。從...
神奇的定律
2011/12/31 13:16:07 |瀏覽 2885 回應 1 推薦 23 引用 0
廣播日期 2009/07/01大家都知道科學的研究有理論和實驗兩個相輔相成的層面,理論是一個模型,加上數學的公式,用來描述物理、化學、或者生物裡真實的現象;實驗是經由觀察這些真實的現象,獲得數據來驗證...
短歌行
2011/11/26 16:06:11 |瀏覽 3504 回應 5 推薦 44 引用 0
廣播日期 2009/06/24 上次我為大家講曹操的一組詩〈步出夏門行〉裡的其中一首詩〈龜雖壽〉。今天,我要講曹操另外一首詩〈短歌行〉。〈步出夏門行〉和〈短歌行〉都是樂府詩裡的舊題目。讓我解釋一下,樂...
老驥伏櫪志在千里
2011/11/19 20:49:48 |瀏覽 3280 回應 2 推薦 26 引用 0
廣播日期2009/06/17 前幾天,電視上看到張忠謀董事長在記者會上,引用了曹操的一首詩〈龜雖壽〉的兩句「老驥伏櫪,志在千里」,今天我想講曹操和他寫的這首詩。曹操是中國東漢末年著名的政治家、軍事家和...
小發現大發明
2011/11/12 14:37:34 |瀏覽 1686 回應 1 推薦 25 引用 0
廣播時間 2009/06/10今天讓我從“三秒膠”講起,“三秒膠”也有人把它叫做“即時?力膠”、“萬能膠”,顧名思義就是一下子就可以把兩件東西堅牢固定地黏合起來的黏合材料。三秒膠原始的品牌是美國柯達公...