哈夫曼编码计算详解
2025-08-28 09:27:20
发布于:广东
哈夫曼编码计算详解
——以字符集{a,b,c,d,e}的频率分布为例
一、问题描述
给定字符频率:
- a: 10%
- b: 15%
- c: 30%
- d: 16%
- e: 29%
构建哈夫曼树,计算字母d的哈夫曼编码长度。
二、哈夫曼树构建过程
核心原则:每次合并权值最小的两个节点,生成新父节点。
步骤分解:
-
初始化节点(按权值升序排列):
a(10), b(15), d(16), e(29), c(30)
-
第1次合并:取最小两个节点 a(10) 和 b(15)
→ 生成新节点 ab(25)(权值=10+15)
新节点集:d(16), ab(25), e(29), c(30)
-
第2次合并:取最小两个节点 d(16) 和 ab(25)
→ 生成新节点 dab(41)(权值=16+25)
新节点集:e(29), c(30), dab(41)
-
第3次合并:取最小两个节点 e(29) 和 c(30)
→ 生成新节点 ec(59)(权值=29+30)
新节点集:dab(41), ec(59)
-
第4次合并:合并最后两个节点 dab(41) 和 ec(59)
→ 生成根节点 root(100)(权值=41+59)
最终哈夫曼树结构:
root(100)
/ \
dab(41) ec(59)
/ \ / \
d(16) ab(25) e(29) c(30)
/ \
a(10) b(15)
三、各字符编码计算:
假定:向左走为0,向右走为1(实际以题目为准)
-
d(16) 的路径:
root → 左到dab → 左到d
→ 编码:00 → 长度=2 -
a(10) 的路径:
root → 左到dab → 右到ab → 左到a
→ 编码:010 → 长度=3 -
b(15) 的路径:
root → 左到dab → 右到ab → 右到b
→ 编码:011 → 长度=3 -
e(29) 的路径:
root → 右到ec → 左到e
→ 编码:10 → 长度=2 -
c(30) 的路径:
root → 右到ec → 右到c
→ 编码:11 → 长度=2
这里空空如也
有帮助,赞一个