霍夫曼树

前提

若二叉树的节点存在权值,则二叉树的叶子节点的带权路径长度为该叶节点的权与路径长度(根节点到叶子节点)的乘积。
二叉树所有叶子节点的带权路径长度之和称为WPL。

定义

给定n个权值作为n个叶子节点,构造一个二叉树,若带权路径长度达到最小,则称为这样的二叉树为最优二叉树,也称为霍夫曼树。
霍夫曼树主要运用在霍夫曼编码,编码规则为:左路径标记为0,右路径标记为1。


霍夫曼树_第1张图片
image.png

上面的树各个节点的编码结果为

节点 编码
A 00
B 01
C 10
D 11

目的

为了将一串字符串以最短的二进制编码存放

构造

1.找出字符串中每个字符的权值或频率。
2.重复找出未进树的所有字符中的最小权值的两个字符,组成左右子节点,并加入此次两个字符权重和到未进树集合
例如:
A:60, B:45, C:13 D:69 E:14 F:5 G:3


霍夫曼树_第2张图片
image.png

A:60, B:45, C:13 D:69 E:14 FG:8


霍夫曼树_第3张图片
image.png

A:60 B: 45 D: 69 E: 14 FGC: 21
霍夫曼树_第4张图片
image.png

···
AD:129 FGCEB: 80
霍夫曼树_第5张图片
image.png

特点

可以看到。权重越高的字符,编码长度越短

编码冲突

由于哈夫曼树种任意一个字符的编码都落在了叶子节点上,并且从根节点到叶子节点中是不存在其他字符编码的,所以不存在两个字符中其中一个字符编码是另一个字符编码的子集。
霍夫曼是贪心的

你可能感兴趣的:(霍夫曼树)