哈夫曼编码加权平均长度与WPL(带权路径长度)计算

哈夫曼编码加权平均长度计算示例

假设有一个字符集及其出现概率如下:

字符概率
A0.4
B0.3
C0.2
D0.1

 

步骤1:构建哈夫曼树
1. 排序:按概率从小到大排序 → D(0.1), C(0.2), B(0.3), A(0.4)  
2. 合并最小概率的两个节点:
   合并 D(0.1) 和 C(0.2) → 新节点 P1(0.3)
   现在队列:B(0.3), P1(0.3), A(0.4)  
3. 继续合并:
   合并 B(0.3) 和 P1(0.3) → 新节点 P2(0.6)  
   现在队列:A(0.4), P2(0.6)  
4. 最后合并:
   合并 A(0.4) 和 P2(0.6) → 根节点(概率1.0)  

步骤2:分配编码
左分支 = 0,右分支 = 1(或相反,不影响最终平均长度):
A(0.4) → `0`(长度1)
B(0.3) → `10`(长度2)
C(0.2) → `110`(长度3)
D(0.1) → `111`(长度3)

步骤3:计算加权平均长度

验证最优性
香农熵(理论最小平均长度):

比较:哈夫曼编码的 L=1.9接近熵 H≈1.846,且满足H≤L<H+1。

另一个例子(固定长度 vs 哈夫曼编码)
假设字符集:A(0.7), B(0.2), C(0.1)  

固定长度编码(2比特/符号)
编码:A=`00`, B=`01`, C=`10`  
平均长度:2×0.7+2×0.2+2×0.1=2 比特/符号  

哈夫曼编码
1. 合并 C(0.1) 和 B(0.2) → P1(0.3)  
2. 合并 P1(0.3) 和 A(0.7) → 根节点(1.0)  
3. 编码:
   A(0.7) → `0`(长度1)
   B(0.2) → `10`(长度2)
   C(0.1) → `11`(长度2)  
4. 平均长度
 L=(0.7×1)+(0.2×2)+(0.1×2)=0.7+0.4+0.2=1.3 比特/符号
压缩率提升:相比固定长度(2比特),哈夫曼编码(1.3比特)节省了35%空间!

总结
哈夫曼编码通过动态分配短码给高频字符,最小化加权平均长度。
计算步骤:
  1. 按概率升序排序;
  2. 反复合并最小概率的节点,构建哈夫曼树;
  3. 分配编码(左0右1或反之);
  4. 计算 L=\sum p_{i}\cdot l_{i}

 

哈夫曼树 WPL(带权路径长度)计算示例

WPL(Weighted Path Length,带权路径长度)是哈夫曼树的一个重要指标,表示所有叶子节点的权值 × 路径长度之和。它直接影响哈夫曼编码的加权平均长度。

计算公式

其中:
权值:通常是字符的频率或概率;
路径长度:从根节点到该叶子节点的边数(即编码位数)。

示例1:计算给定哈夫曼树的 WPL
假设已经构建好如下哈夫曼树(数字代表权值):

        (100)
       /     \
     (40)    (60)
            /   \
          (25)  (35)


叶子节点:
左子树:40(路径长度=1)
右子树的左:25(路径长度=2)
右子树的右:35(路径长度=2)

计算 WPL:
WPL=(40\times 1)+(25\times ×2)+(35\times ×2)=40+50+70=160

示例2:从字符频率构建哈夫曼树并计算 WPL
给定字符频率:

字符频率
A5
B9
C12
D13
E16
F45

步骤1:构建哈夫曼树
1. 按频率升序排列:A(5), B(9), C(12), D(13), E(16), F(45)。
2. 每次合并最小的两个节点:
        合并 A(5) + B(9) → P1(14)
        合并 C(12) + D(13) → P2(25)
        合并 P1(14) + E(16) → P3(30)
        合并 P2(25) + P3(30) → P4(55)
        合并 F(45) + P4(55) → 根节点(100)

最终哈夫曼树结构:
        (100)
       /     \
    F(45)   (55)
           /    \
        (25)    (30)
       /    \   /    \
    C(12) D(13) P1(14) E(16)
               /    \
            A(5)    B(9)

步骤2:计算 WPL
F(45):路径长度=1 → 45×1=45
C(12):路径长度=3 → 12×3=36
D(13):路径长度=3 → 13×3=39
A(5):路径长度=4 → 5×4=20
B(9):路径长度=4 → 9×4=36
E(16):路径长度=3 → 16×3=48

WPL=45+36+39+20+36+48=224

示例3:验证 WPL 与哈夫曼编码的关系
对上述字符集进行哈夫曼编码:
F(45):`0`(长度1)
C(12):`100`(长度3)
D(13):`101`(长度3)
A(5):`1100`(长度4)
B(9):`1101`(长度4)
E(16):`111`(长度3)

计算加权平均编码长度:

结论:WPL(224)除以总频率(100)即为加权平均长度(2.24),两者直接相关。

关键点总结
1. WPL 是哈夫曼树的带权路径长度,等于所有叶子节点的(权值×路径长度)之和。
2. 哈夫曼编码的加权平均长度 = WPL / 总频率。
3. 构建哈夫曼树时,每次合并权值最小的两个节点,确保 WPL 最小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值