假設我們擁有一串數字: 5,12,33,19,40,41, 這些數字均各自代表每個字串從文本取得的頻率資訊。
舉例來說,我(5), 想要(12), 車站(33), 汽車(19), 車牌(40), 轉彎(41)。
•在建構 Huffman tree (霍夫曼樹)前,我們要先針對此數字串進行小到大的排序,會得到下列的結果:
•5,12,19,33,40,41
•接下來我們開始介紹如何建構 Huffman tree (霍夫曼樹):
節點結合步驟: 每次都挑兩個最小值的節點進行合併
合併會產生一個新節點,並且依大小排入尚未合併的數字串中
移動33與36
移動40與41
最後合併成一棵樹為止
接著節點的左邊為0,右邊為1
然後我們針對葉節點(原本的數字)進行編碼,從最高層的葉節點開始編碼。
然後從第二層的葉節點開始編碼。
然後從第三層的葉節點開始編碼。
資料壓縮率
轉換回原來對應的文本概念,就是每個數字代表字串出現在文本的頻率:
•原本的資料量: 8 bit*(5+12+19+33+40+41) = 1200 (假設一開始的每個詞彙均為 8bit)
•霍夫曼編碼後: 2*(33+40+41)+3*(19)+4*(5+12) = 353
•壓縮率 = (1- (353/1200))*100%, = 70.58%
文章標籤
全站熱搜

謝謝你的文章解說 可不可以請問 資料壓縮率的第一行 : 1200 以及第二行 : 353 是怎麼算出來的 ? 謝謝
假設每個節點代表某個字,然後其數字代表它在文本中出現的次數,所以此壓縮代表對於整個文本的壓縮率,我文中對於此部份沒有詳細解釋,稍後會補上,感謝提問
more info in http://seriesonline.fm/
講得很清楚,謝謝!
資料壓縮率的第一行1200, 那個8bit是從哪裡來的呢?? 謝謝版主答覆
感謝提醒,因為一開始我假設中文斷詞後每個詞彙是佔 1byte (8bit),所以我才會寫原始資料量是 8 bit*(5+12+19+33+40+41) = 1200
解釋很清楚!謝謝~
想問一下, 40 41為什麼自成一株小的 不是照慣與兩數相加之和做加法呢?
40, 41 的確是按照之前的加法相加,但是69的樹比81小,所以會自成一顆,無法掛在69底下。