哈夫曼树也称为最优二叉树,是一种带权路径长度最短的完全二叉树。
最经典的用法就是做无损数据压缩的huffman coding
概念:
哈夫曼树也称为最优二叉树,是一种带权路径长度最短的完全二叉树(Complete Binary Tree)
树的带权路径长度:树中所有的叶结点的权值乘上其深度(到根结点的路径长度),然后进行加和的结果。
哈夫曼树中根结点为第0层,N个权值构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为其层数。树的路径长度是从树根到每一结点的路径长度之和,记为WPL 易证哈夫曼树的WPL是最小的。
原理:
编码表是通过对源符号出现的概率进行评估的方式得到,出现概率高的符号使用较短的编码,反之则使用较长的编码,由此实现编码后字符串的平均长度的期望值降低,从而达到无损压缩数据的目的。
举例:
根据文本文件得出45个不同字符,通过所给的函数初始化哈夫曼树,根据45个初始节点完善填充整个(2*n-1 = 89)哈夫曼数组,再根据哈夫曼数组制作密码本,进行文件的压缩(加密)与解压(解密)的功能实现。
1 | |