郝夫曼树

来源:互联网 发布:timeline软件 中文 编辑:程序博客网 时间:2024/04/29 18:09

今天复习了郝夫曼树,郝夫曼编码.
郝夫曼树又称作最优树,是一类带权路径长度最短的树.
所以这里有一个概念就是结点的带权路径长度和树的带权路径长度.


结点的带权路径长度:树中所有结点到树根之间的路径长度与结点上权的乘积.
树的带权路径长度:树中所有叶子结点的带权路径长度之和(只是叶子结点而非所有结点).


权在不同的实际应用中有不同的含义,郝夫曼编码中的权指的是字符出现的频率(或者说次数)。

背景
在数据通信中,需要对通信信息进行二进制编码(每个字符底层都是用二进制表示).在传递信息时,我们总是希望数据长度尽可能的短.总的来说有两种编码方式:

等长编码,每个字符用等长的二进制位:译码时只需按固定的长度去翻译.

不等长编码,即不同的字符有不同的位数::这时必须要满足一个条件,任何一个字符的编码都不是另一个字符编码的前缀(前缀编码),因为你接收到的数据只是二进制序列,给该序列进行断位应该具有唯一性,不然会出现二义性.

进行编码和译码都离不开编码表.而郝夫曼编码就是用来设计一个能总是用最短序列来表示数据的方法.其实我们平时使用中文,英文都有一个编码表的,比如utf-8等.


大概思路:
1.确定字符的权(出现的频率)。
2.构造郝夫曼树,字符作为叶子结点.
3.根据郝夫曼树确定编码表,左路径写0,有路径写1,这就是最优编码表.

构造郝夫曼树方法:贪心法. 首先选择权小的,这样保证权大的离根节点比较近.


代码略.

0 0
原创粉丝点击