zoukankan      html  css  js  c++  java
  • 数据--第38课

    第38课 - 霍夫曼树

    1. 最初的解决方案

    对于文本“BADCADFEED”的传输而言,因为重复出现的只有“ABCDEF”这六个字符,因此可以用下面的方式编码:

    A

    B

    C

    D

    E

    F

    000

    001

    010

    011

    100

    101

    接收方可以根据每3个bit进行一次字符解码的方式还原文本信息。

    2. 存在的问题

    这样的编码需要30个bit才能表示10个字符。容易出错。

    3. 改进

    避免每个字符都占用相同的bit位。

    A

    B

    C

    D

    E

    F

    01

    1001

    101

    00

    11

    1000

    25个bit就能表示10个字符,效率提高17%。

    4. 霍夫曼树

    (1)      给定n个数值{v1, v2, ...vn}

    (2)      根据这n个数值构造二叉树集合F,F = {T1, T2, ..,Tn},Ti得到数据域vi,左右子树为空。

    (3)      在F中选取两颗树根节点的最小的数作为左右子树构造一棵新的二叉树,这棵二叉树的根节点中的值为左右子树根节点中的值的和。

    (4)      在F中删除这两棵子树,并将构造的新的二叉树加入F中。

    (5)      重复3和4,直到F中只剩下一个树为止。这棵树就是霍夫曼树。

    5. 霍夫曼树的应用

    假设经过统计ABCDEF在需要传输的保温中出现的概率如下:

    A

    B

    C

    D

    E

    F

    27%

    8%

    15%

    15%

    30%

    5%

    根据这些数值构造的霍夫曼树如下:

    该霍夫曼树叶结点在树中的位置编码如下:

    A:01

    B:1001

    C:101

    D:00

    E:11

    F:1000

     

     

     

     

     

    小结:

    霍夫曼树是一种特殊的二叉树。

    霍夫曼树应用于信息编码和数据压缩领域。

    霍夫曼树是现代压缩算法的基础。

  • 相关阅读:
    mysql/mariadb学习记录——查询2
    mysql/mariadb学习记录——查询
    touchSwipe 上下左右滑动,二指缩放 效果不好。
    c# 调用c++ 使用指针传递的时候
    c# 调用 matlab 引发初始化错误 异常
    创建非主键唯一约束
    sql 中 如果添加 时间戳 字段 timestamp
    JS frame 跨域 传值
    VS 附加进程调试
    Aspose.words 替换字符 操作
  • 原文地址:https://www.cnblogs.com/free-1122/p/11336059.html
Copyright © 2011-2022 走看看