哈夫曼树是数据结构的一种,用于实现无损压缩。压缩分为无损压缩和有损压缩,使用哈夫曼压缩的压缩比可达3:1到5:1,流行的有损压缩方法有lzw字典压缩等。
几个名词解释:
最优二叉树:树的加权路径总长度最短的二叉树。
权值:每个叶子节点带有一定的权值,在哈夫曼树中为该叶子节点代表的字符的出现频率。
树的加权路径总长度:各叶子节点到根节点的路径长度与该节点的权的乘积的总和。
加权路径长度:从根节点到该节点之间的路径长度与该节点的权的乘积。
路径长度(深度):当前节点到根节点所经历的层数。
叶子节点:没有子树的节点。
根节点:没有父节点的节点。
哈夫曼树属于二叉树的一种,是一种非线性的数据结构,其实现压缩的思想大致如下:
举个例子:英文中各个字母出现的频率是大不相同的,因此,对不同字母的编码长度若相同,就会浪费太多的空间,若给予出现频率较高的字符以较短的编码,而出现频率较少的字符以较长的编码。那么,总体的编码长度便会大大缩短,把该二进制编码存进文件中可实现压缩。术语志之曰:“最优编码方法”。哈夫曼树是一种最优二叉树,其自下向上的建树方法使得权值越大的节点越靠近根节点。
实现过程:
1.统计字符频率
建一个大小为256的byte数组,使用位映射,每读入一个字节,便在数组中该字节对应的