哈夫曼树,哈夫曼编码

哈夫曼树

1.历史

  1. 首先是为了找到最有效的高效的(空间,整体)编码,然后借助数据结构种的树型结构,发现通过构建这样一颗二叉树,可以得到最有效的编码

2.概念

  1. 给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小的树。又称最优二叉树,整体判定过程效率最高的数据结构

    1. 二叉树
    2. 带权的节点为叶子节点
    3. 树的带权路径长度最小
  2. 相关概念:

     

    1. 路径:一个节点到另一个节点之间的分支构成这两个节点之间的路径

    2. 路径的长度:路径上的分支数目之和

    3. 树的路径长度:根节点到每个节点的路径长度之和

    4. 节点的带权路径长度:从根节点到该节点的路径长度与节点的权值的乘积

    5. 树的带权路径长度:根节点到每个叶子节点的带权路径长度的和 (wpl)

    6. 权值:出现的概率(根据实际情况统计而来的)

3. 实现

  1. 构建 : 使权值越大的节点,路径长度越小(越靠近根节点)

  2. 步骤:

    1. 在森林中选取两颗根节点权值最小的树做为左右子树,构建新的二叉树,更新二叉树的根节点权值为左右两个节点的权值之和

    2. 在森林中删除这两棵树,并把新构建的树加入森林

    3. 重复上诉两部,直到只有一棵树

       

    4. 注意点:

      1. 相同的带权节点可以构成多颗哈夫曼树

      2. 一般,将最新构造成的树放到等概率的最后合并,将有利于缩短码长差,并且编出的码更接近等长码,但是不同的构造方式最后构造出来的哈夫曼树的wpl是一样的

4. 应用

  1. 哈夫曼编码

    1. 场景:数据通信的过程中会将每个出现的字符转换为二进制编码,用0,1码的不同顺序代表字符,并且在设计编码的时候需要满足两个原则

      1. 发送和解读的一致性和唯一性

      2. 编码长度尽可能短

      3. 实现

        1. 等长编码 :解读简单,但是不短

        2. 不等长编码:可以做到尽可能的短,但是不一定满足唯一性

        3. 前缀编码:在不等长编码的基础上,使得每个编码不是其他任何一个编码的前缀

          1. 字符的使用频率作为叶子节点的权值构建一颗哈夫曼树

          2. 从根节点开始,左分支为0,右分支为1,从根节点到叶子节点的路径为该叶子节点的编码

    1. 静态哈夫曼编码

      1. 以下:需要对源数据进行多次遍历:统计

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值