哈夫曼算法原理
時(shi)間(jian):2018-12-17 來源:華清遠見(jian)
1952年(nian), David A. Huffman提出了(le)一個不同的(de)(de)算法(fa),這個算法(fa)可以為任何的(de)(de)可能性提供出一個理(li)想的(de)(de)樹(shu)。香農-范(fan)諾編(bian)碼(ma)(Shanno-Fano)是從(cong)樹(shu)的(de)(de)根(gen)節點(dian)到(dao)葉子節點(dian)所進行的(de)(de)的(de)(de)編(bian)碼(ma),哈夫曼編(bian)碼(ma)算法(fa)卻(que)是從(cong)相反(fan)的(de)(de)方(fang)(fang)向,暨從(cong)葉子節點(dian)到(dao)根(gen)節點(dian)的(de)(de)方(fang)(fang)向編(bian)碼(ma)的(de)(de)。
為每個符號建立一個葉(xie)子(zi)節點,并加上其相(xiang)應的發生(sheng)頻率
當有(you)一個以上的節(jie)點存在(zai)時(shi),進行下列循環:
把這(zhe)些節(jie)點作為(wei)(wei)帶權(quan)值的二(er)叉樹(shu)的根節(jie)點,左(zuo)右(you)子樹(shu)為(wei)(wei)空
選擇(ze)兩棵根結點(dian)(dian)權(quan)(quan)值最(zui)小(xiao)的樹作為(wei)(wei)左右(you)子樹構(gou)造一棵新的二(er)叉樹,且(qie)至(zhi)新的二(er)叉樹的根結點(dian)(dian)的權(quan)(quan)值為(wei)(wei)其(qi)左右(you)子樹上根結點(dian)(dian)的權(quan)(quan)值之和。
把權值最小的兩個根節(jie)點移(yi)除
將新的二(er)叉樹加入隊列(lie)中.
最(zui)后剩下的節點暨為根節點,此時二叉樹(shu)已經完成(cheng)。
示例:


在這(zhe)種情況下,D,E的(de)最(zui)低(di)(di)頻(pin)率(lv)和(he)分配(pei)分別為0和(he)1,分組結(jie)合(he)(he)概率(lv)的(de)0.28205128。現在最(zui)低(di)(di)的(de)一(yi)雙是B和(he)C,所(suo)(suo)以他們(men)就分配(pei)0和(he)1組合(he)(he)結(jie)合(he)(he)概率(lv)的(de)0.33333333在一(yi)起。這(zhe)使(shi)得BC和(he)DE所(suo)(suo)以0和(he)1的(de)前面加上他們(men)的(de)代碼和(he)它們(men)結(jie)合(he)(he)的(de)概率(lv)最(zui)低(di)(di)。然(ran)后離開只是一(yi)個和(he)BCDE,其中(zhong)有前綴分別為0和(he)1,然(ran)后結(jie)合(he)(he)。這(zhe)使(shi)我們(men)與一(yi)個單一(yi)的(de)節點,我們(men)的(de)算(suan)法是完整的(de)

