1. 程式人生 > >【^小知識^】哈夫曼演算法原理

【^小知識^】哈夫曼演算法原理

1952年, David A. Huffman提出了一個不同的演算法,這個演算法可以為任何的可能性提供出一個理想的樹。夏農-範諾編碼(Shanno-Fano)是從樹的根節點到葉子節點所進行的的編碼,哈夫曼編碼演算法卻是從相反的方向,暨從葉子節點到根節點的方向編碼的。

為每個符號建立一個葉子節點,並加上其相應的發生頻率

當有一個以上的節點存在時,進行下列迴圈:

把這些節點作為帶權值的二叉樹的根節點,左右子樹為空

選擇兩棵根結點權值最小的樹作為左右子樹構造一棵新的二叉樹,且至新的二叉樹的根結點的權值為其左右子樹上根結點的權值之和。

把權值最小的兩個根節點移除

將新的二叉樹加入佇列中.

最後剩下的節點暨為根節點,此時二叉樹已經完成。

示例:

在這種情況下,D,E的最低頻率和分配分別為0和1,分組結合概率的0.28205128。現在最低的一雙是B和C,所以他們就分配0和1組合結合概率的0.33333333在一起。這使得BC和DE所以0和1的前面加上他們的程式碼和它們結合的概率最低。然後離開只是一個和BCDE,其中有字首分別為0和1,然後結合。這使我們與一個單一的節點,我們的演算法是完整的。