• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

dream311

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

十、哈夫曼编码

计算机里每个字符在没有压缩的文本文件中由一个字节(如常见的ASCII码)或两个字节(如Unicode)表示。这些方案中,每个字符需要相同的位数。有很多的数据压缩的方法。对文本来说,最常用的方法是减少表示最常用字符的位数量。但有个规则:每个代码都不能是其他代码的前缀。使用哈夫曼编码可以满足条件。

创建哈夫曼树:

1、为消息中的每个字符创建一个TreeNode对象。每个节点有两个数据项:字符和字符在消息中出现的频率。

2、为这些节点创建Tree对象,这些节点就是树的根。

3、把这些树都插入到一个优先级队列中。它们按频率排序,频率最小的节点有最高的优先级。

现在做下面的事:

    1、从优先级队列中删掉两棵树,并把它们作为一个新节点的子节点。新节点的频率是子节点频率的和,它的字符字段可以是空的。

    2、把这个新的三节点树插回到优先级队列里。

    3、反复重复第一部和第二步。树会越变越大,队列中的数据项会越来越少。当队中只有一棵树时,它就是所建的哈夫曼树了。

 

创建哈夫曼编码:

从哈夫曼树的根开始并顺着哈夫曼树沿一条可能的路径到达叶节点。在顺着树往下走时,记录向左和向右的顺序,向左的边用0表示,向右的边就用1表示。到达某个叶子节点后,0和1的序列就是这个字符的哈夫曼编码。把这个代码插入代码表的正确位置就可以了。

 

哈夫曼解码:

每个字符都从根开始。如果遇到0,就向左走到下个节点,如果遇到1,就向右。最后到叶节点,就找到这个字符了。

 

posted on 2015-11-27 13:47  dream311  阅读(195)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3