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

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

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

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

字符概率A0.4B0.3C0.2D0.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

另一个例子(固定长度 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. 计算 。

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

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

计算公式

其中:

权值:通常是字符的频率或概率;

路径长度:从根节点到该叶子节点的边数(即编码位数)。

示例1:计算给定哈夫曼树的 WPL

假设已经构建好如下哈夫曼树(数字代表权值):

(100)

/ \

(40) (60)

/ \

(25) (35)

叶子节点:

左子树:40(路径长度=1)

右子树的左:25(路径长度=2)

右子树的右:35(路径长度=2)

计算 WPL:

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

给定字符频率:

字符频率A5B9C12D13E16F45

步骤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

示例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 最小。

相关推荐

365bet亚洲版登陆首页 探索街机游戏世界:十大必备模拟器软件推荐

探索街机游戏世界:十大必备模拟器软件推荐

bt365博彩手机版 轻松学会瓜子头修剪,打造绝佳发型的必备技巧!

轻松学会瓜子头修剪,打造绝佳发型的必备技巧!

bt365博彩手机版 自拍杆蓝牙怎么关机

自拍杆蓝牙怎么关机