
霍夫曼編碼(Huffman Coding),又譯為哈夫曼編碼、赫夫曼編碼,是一種用於無損資料壓縮 演算法。由大衛·霍夫曼在 1952 年發明。 在電腦資料處理中,霍夫曼編碼使用變長編碼表對源符號(如檔案中的一個字母)進行編碼。 例如,在英文中,e 的出現機率最高,而 z 的出現機率則最低。當利用霍夫曼編碼對一篇英文 進行壓縮時,e 極有可能用一個位元來表示,而 z 則可能花去 25 個位元(不是 26)。用普通 的表示方法時,每個英文字母均占用一個字元組,即 8 個位元。二者相比,e 使用了一般編 碼的1/8的長度, z則使用了3倍多。倘若我們能對於英文中各個字母出現機率較準確的估算, 就可以大幅度提高無失真壓縮的比例。 霍夫曼編碼(Huffman Coding)要先建立霍夫曼樹(Huffman Tree): 建立霍夫曼樹(Huffman Tree)步驟: (一) 針對相異字元, 統計其出現的次數 : (二) 為每個字元建立一顆只有一節點的樹, 每棵樹的根節點之關鍵值(紅色字)為其字元出現的 次數. (三) 找出根節點關鍵值(出現次數)最小的兩顆樹。 (四) 產生一個新的根節點,並將找到的兩棵樹分別當作此新的根節點之左右子樹(節點關鍵值 大的放左樹,關鍵值小的放右樹或是節點關鍵值小的放左樹,關鍵值大的放右樹),而根節點 的關鍵值為左右子樹節點之關鍵值(紅色字)的和. (五) 重複步驟 (三) 與 (四),直至全部節點合併為一棵樹。 ( 三) 找出根節點關鍵值(出現次數)最小的兩顆樹13,1(三) 找出根節點關鍵值(出現次數)最小的兩顆樹8,11。 (三)找出根節點關鍵值(出現次數)最小的兩顆樹19,19。 二個關鍵值一樣,可以安照排序先後秩序(三) 找出根節點關鍵值(出現次數)最小的兩顆樹28,38 輸入說明: 第一列的數字 n 代表有幾筆資料要測試, ,第二列起為測試資料,之後每列為每組 測試資料,每組測試資料至少有2個正整數最多有26個正整數,正整數數字 , 。 各個數字間以“,”隔開,分別代表各字元的出現的次數。每組資料都有 M 個相異數字 ( ) ,讓你去建立霍夫曼樹(Huffman Tree)。會避免 ...