哈夫曼树(哈夫曼建树及编码)

哈夫曼树是一种用于无损压缩的数据结构,通过优化编码长度达到高效压缩。文章介绍了哈夫曼树的概念,包括最优二叉树、权值、加权路径长度等,并详细讲解了哈夫曼树的构建过程和编码方法。通过统计字符频率,构建哈夫曼树,再将编码转换为二进制串存入文件,从而实现数据压缩。
摘要由CSDN通过智能技术生成

哈夫曼树是数据结构的一种,用于实现无损压缩。压缩分为无损压缩和有损压缩,使用哈夫曼压缩的压缩比可达3:1到5:1,流行的有损压缩方法有lzw字典压缩等。

几个名词解释:

       最优二叉树:树的加权路径总长度最短的二叉树。

       权值:每个叶子节点带有一定的权值,在哈夫曼树中为该叶子节点代表的字符的出现频率。

       树的加权路径总长度:各叶子节点到根节点的路径长度与该节点的权的乘积的总和。

       加权路径长度:从根节点到该节点之间的路径长度与该节点的权的乘积。

       路径长度(深度):当前节点到根节点所经历的层数。

       叶子节点:没有子树的节点。

       根节点:没有父节点的节点。

哈夫曼树属于二叉树的一种,是一种非线性的数据结构,其实现压缩的思想大致如下:

举个例子:英文中各个字母出现的频率是大不相同的,因此,对不同字母的编码长度若相同,就会浪费太多的空间,若给予出现频率较高的字符以较短的编码,而出现频率较少的字符以较长的编码。那么,总体的编码长度便会大大缩短,把该二进制编码存进文件中可实现压缩。术语志之曰:“最优编码方法”。哈夫曼树是一种最优二叉树,其自下向上的建树方法使得权值越大的节点越靠近根节点。

实现过程:

1.统计字符频率

建一个大小为256的byte数组,使用位映射,每读入一个字节,便在数组中该字节对应的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值