zoukankan      html  css  js  c++  java
  • 十、哈夫曼编码

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

    创建哈夫曼树:

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

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

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

    现在做下面的事:

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

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

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

     

    创建哈夫曼编码:

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

     

    哈夫曼解码:

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

  • 相关阅读:
    LVS---服务器集群系统
    I/O的基本概念
    rsync+cron同步文件服务
    IAAS、PAAS、SAAS及公有云、私有云概念
    Python3456学习结构
    Python列表常用函数解析
    Python字符串常用函数详解
    验证码生成
    Python随机数生成random.randint()与np.random.randint()
    python在线&离线安装第三库的方法
  • 原文地址:https://www.cnblogs.com/xxlong/p/5000447.html
Copyright © 2011-2022 走看看