数据--第38课

第38课 - 霍夫曼树

1. 最初的解决方案

对于文本“BADCADFEED”的传输而言,因为重复出现的只有“ABCDEF”这六个字符,因此可以用下面的方式编码:

A

B

C

D

E

F

000

001

010

011

100

101

接收方可以根据每3个bit进行一次字符解码的方式还原文本信息。

2. 存在的问题

这样的编码需要30个bit才能表示10个字符。容易出错。

3. 改进

避免每个字符都占用相同的bit位。

A

B

C

D

E

F

01

1001

101

00

11

1000

25个bit就能表示10个字符,效率提高17%。

4. 霍夫曼树

(1)      给定n个数值{v1, v2, ...vn}

(2)      根据这n个数值构造二叉树集合F,F = {T1, T2, ..,Tn},Ti得到数据域vi,左右子树为空。

(3)      在F中选取两颗树根节点的最小的数作为左右子树构造一棵新的二叉树,这棵二叉树的根节点中的值为左右子树根节点中的值的和。

(4)      在F中删除这两棵子树,并将构造的新的二叉树加入F中。

(5)      重复3和4,直到F中只剩下一个树为止。这棵树就是霍夫曼树。

5. 霍夫曼树的应用

假设经过统计ABCDEF在需要传输的保温中出现的概率如下:

A

B

C

D

E

F

27%

8%

15%

15%

30%

5%

根据这些数值构造的霍夫曼树如下:

该霍夫曼树叶结点在树中的位置编码如下:

A:01

B:1001

C:101

D:00

E:11

F:1000

 

 

 

 

 

小结:

霍夫曼树是一种特殊的二叉树。

霍夫曼树应用于信息编码和数据压缩领域。

霍夫曼树是现代压缩算法的基础。

原文地址:https://www.cnblogs.com/free-1122/p/11336059.html