1952年, David A. Huffman提出了一個不同的算法,這個算法可以為任何的可能性提供出一個理想的樹。香農(nóng)-范諾編碼(Shanno-Fano)是從樹的根節(jié)點到葉子節(jié)點所進行的的編碼,哈夫曼編碼算法卻是從相反的方向,暨從葉子節(jié)點到根節(jié)點的方向編碼的。
為每個符號建立一個葉子節(jié)點,并加上其相應(yīng)的發(fā)生頻率
當有一個以上的節(jié)點存在時,進行下列循環(huán):
把這些節(jié)點作為帶權(quán)值的二叉樹的根節(jié)點,左右子樹為空
選擇兩棵根結(jié)點權(quán)值最小的樹作為左右子樹構(gòu)造一棵新的二叉樹,且至新的二叉樹的根結(jié)點的權(quán)值為其左右子樹上根結(jié)點的權(quán)值之和。
把權(quán)值最小的兩個根節(jié)點移除
將新的二叉樹加入隊列中.
最后剩下的節(jié)點暨為根節(jié)點,此時二叉樹已經(jīng)完成。
示例:
在這種情況下,D,E的最低頻率和分配分別為0和1,分組結(jié)合概率的0.28205128。現(xiàn)在最低的一雙是B和C,所以他們就分配0和1組合結(jié)合概率的0.33333333在一起。這使得BC和DE所以0和1的前面加上他們的代碼和它們結(jié)合的概率最低。然后離開只是一個和BCDE,其中有前綴分別為0和1,然后結(jié)合。這使我們與一個單一的節(jié)點,我們的算法是完整的
华清图书馆
0元电子书,限时免费申领10本华清图书PDF版
扫码关注华清远见公众号