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,然后結合。這使我們與一個單一的節點,我們的算法是完整的。