霍夫曼樹是壹棵二叉樹,每個葉節點代表壹個符號,其權重是該符號在符號序列中出現的概率。每個非葉節點的權重是其左右子節點的權重之和。哈夫曼樹的構造方法是對所有符號的權重進行排序,每次取出權重最小的兩個符號組成壹個新節點,這個新節點的權重就是這兩個節點的權重之和。然後將這個新節點添加到排序序列中,直到只剩下壹個節點,這就是霍夫曼樹。
霍夫曼編碼就是用這種樹進行編碼的過程。對於每個符號,從根節點到葉節點的路徑上每個節點的左右子對應於壹個二進制位,左子對應於0,右子對應於1。編碼是以這種方式獲得的二進制序列。我們可以知道霍夫曼編碼中符號的碼長是不同的,符號的概率越大,碼長越短,這使其具有更高的壓縮率。
霍夫曼解碼是根據霍夫曼樹和二進制代碼找到相應的葉節點並獲得原始符號的過程。
總之,霍夫曼編碼基於符號在編碼過程中的出現概率對符號進行編碼,因此出現概率高的符號的編碼長度短,出現概率低的符號的編碼長度長。這樣可以達到壓縮數據的目的。霍夫曼解碼是根據霍夫曼樹恢復編碼前的符號。