1. 程式人生 > >哈夫曼編碼效果最優的原因

哈夫曼編碼效果最優的原因

首先了解幾個概念:

1.路徑長度

在樹中從一個結點到另一個結點所經歷的分支構成了這兩個結點間的路徑上的分支數稱為它的路徑長度

2.樹的路徑長度
     樹的路徑長度是從樹根到樹中每一結點的路徑長度之和。在結點數目相同的二叉樹中,完全二叉樹的路徑長度最短。

3.樹的帶權路徑長度(Weighted Path Length of Tree,簡記為WPL)
  結點的權
:在一些應用中,賦予樹中結點的一個有某種意義的實數。
  結點的帶權路徑長度:結點到樹根之間的路徑長度與該結點上權的乘積。
  樹的帶權路徑長度(Weighted Path Length of Tree):定義為樹中所有葉結點的帶權路徑長度之和,通常記為: 
                
  其中:
 

   n表示葉子結點的數目
    wi
li分別表示葉結點ki的權值和根到結點ki之間的路徑長度。樹的帶權路徑長度亦稱為樹的代價。

三:用一個例子來理解一下以上概念

【例】給定4個葉子結點a,b,c和d,分別帶權7,5,2和4。構造如下圖所示的三棵二叉樹(還有許多棵),它們的帶權路徑長度分別為:

        (a)WPL=7*2+5*2+2*2+4*2=36
        (b)WPL=7*3+5*3+2*1+4*2=46
        (c)WPL=7*1+5*2+2*3+4*3=35

其中(c)樹的WPL最小,可以驗證,它就是哈夫曼樹。因此哈夫曼樹是最優二叉樹。

當我們把權值定義為節點出現的概率,如a出現的概率是7/13,b是5/13,此時WPL=7/13*1+5/13*2+2/12*3+4/13*3 就是平均碼長。這也就意味著哈夫曼編碼的平均碼長最小。因此效果最優。