當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 哈夫曼算法原理
1952年, David A. Huffman提出了一個(gè)不同的算法,這個(gè)算法可以為任何的可能性提供出一個(gè)理想的樹。香農(nóng)-范諾編碼(Shanno-Fano)是從樹的根節(jié)點(diǎn)到葉子節(jié)點(diǎn)所進(jìn)行的的編碼,哈夫曼編碼算法卻是從相反的方向,暨從葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的方向編碼的。
為每個(gè)符號(hào)建立一個(gè)葉子節(jié)點(diǎn),并加上其相應(yīng)的發(fā)生頻率
當(dāng)有一個(gè)以上的節(jié)點(diǎn)存在時(shí),進(jìn)行下列循環(huán):
把這些節(jié)點(diǎn)作為帶權(quán)值的二叉樹的根節(jié)點(diǎn),左右子樹為空
選擇兩棵根結(jié)點(diǎn)權(quán)值最小的樹作為左右子樹構(gòu)造一棵新的二叉樹,且至新的二叉樹的根結(jié)點(diǎn)的權(quán)值為其左右子樹上根結(jié)點(diǎn)的權(quán)值之和。
把權(quán)值最小的兩個(gè)根節(jié)點(diǎn)移除
將新的二叉樹加入隊(duì)列中.
最后剩下的節(jié)點(diǎn)暨為根節(jié)點(diǎn),此時(shí)二叉樹已經(jīng)完成。
示例:
在這種情況下,D,E的最低頻率和分配分別為0和1,分組結(jié)合概率的0.28205128,F(xiàn)在最低的一雙是B和C,所以他們就分配0和1組合結(jié)合概率的0.33333333在一起。這使得BC和DE所以0和1的前面加上他們的代碼和它們結(jié)合的概率最低。然后離開只是一個(gè)和BCDE,其中有前綴分別為0和1,然后結(jié)合。這使我們與一個(gè)單一的節(jié)點(diǎn),我們的算法是完整的