- 赫夫曼编码是首个实用压缩编码方案.根据字符出现的频率利用赫夫曼编码可以构造出一个不等长的二进制,使用编码后电文长度最短,且保证不产生二义性.
- 赫夫曼树
先把两颗二叉树简化成叶子节点带权的二叉树.(树节点之间的连线相关的数叫做权,weight).
节点的路径长度: 从根节点到该节点的路径连接数.
树的路径长度: 树中每个叶子节点的路径长度之和.
节点带权路径长度: 节点路径长度和节点的权值的乘积
树的带权路径长度:(WPL) 是树中所有叶子节点的带权路径长度之和.
WPL的值越小,说明构造出的二叉树的性能就越优.
赫夫曼树就是最优二叉树.
构造赫夫曼树:
在森林中选出两颗根节点权值最小的二叉树.
合并两颗选出的二叉树,增加一个新的节点作为新二叉树的根,权值为左右孩子的权值和.
在森林里找到最小的权值的树放在新根节点的左边或右边.
赫夫曼编码:
定长编码: 像ascii码,约定用8位来表示一个字符.
变长编码: 单个编码的长度允许不一致,可以根据整体出现频率来调节,比如赫夫曼编码.
前缀码: 所谓的前缀码,没有任何码字是其他码字的前缀码.
构建赫夫曼编码的五个过程:
build a priority queue
build a huffumanTree
build a huffumanTable
encode
decode
左子树用0表示,右子树用1表示.