`
王浩洋
  • 浏览: 16633 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

哈夫曼树

    博客分类:
  • java
阅读更多
最优二叉树之哈弗曼树
   哈弗曼树是一类带全路径最短的树,所以又称为最优二叉树。构造这种树的算法最早是由哈弗曼提出,这种树在现在有着广泛的应用。例如文件压缩啦,信息检索啦...
   下面先谈谈哈弗曼树的构建,举个例子来说吧。根据一段字符串构建一棵哈夫曼树,出现的每个字符都代表着树叶的值,字符出现的次数代表其权值,下面是具体的步骤:
   1.根据字符和出现的次数(权值)创建节点,并把节点都存放到一个队列中。
   2.每次从队列中取出2个权值最小的节点作为左,右子数构建一个新的节点,新的节点的权值为他们两个权值的和。
   3.将新的节点加入到刚才的队列中,删除原来两个权值最小的节点。
   4.重复2,3的步骤直到队列中只有一个节点为止,把这个节点作为树根,这棵哈夫曼树就构建成功了。

    接下来说说关于哈弗曼码表的获取,其实很简单啦,从树根开始往下走直到最底下的叶,
路过左树枝的就加0,路过右树枝的就加1,就这样每个叶(字符)对应的码表就获取到了。

    然后聊聊哈弗曼压缩到底是怎么实现的呢?哈夫曼编码是01串组合,这样我们就可以通过编码先把文件转换成相应的01串再存进去,8个01串才占一个字节而一个汉字占4个字节,一个字符占2个字节,因此可以节约很多空间,实现压缩。
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics