zoukankan      html  css  js  c++  java
  • 霍夫曼编码

    霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。

    霍夫曼编码具体步骤:

    1、将信源符号的概率按减小的顺序排序
    2、把两个最小的概率相加,始终将比较大的概率的分支放在右边,继续这一步骤(选取根节点权重最小的两棵树合并)
    3、画出到每个信源符号的路径,(左0右1)得到每个信源符号的霍夫曼码

    如:由6个不同字母组成的30个的字符串:CCABD EAFDD AACEE BBACA EFAAB CCCEA

    1、计算每个字母的概率

    A-----------------9
    C-----------------7
    E-----------------5
    B-----------------4
    D-----------------3
    F-----------------2

    2、将概率最小的相加并将较大概率分支放在右边

    3、按左0右1的原则画出每个信源符号路径,得下图

    获得每个字符的编码:

    A-----------------9-----------------10
    C-----------------7-----------------01
    E-----------------5-----------------111
    B-----------------4-----------------110
    D-----------------3-----------------001
    F-----------------2-----------------000

    EG:

    某通信码中只会出现8中字符,其概率分别是0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,若对其进行霍夫曼编码,其霍夫曼树的高度是?

    计算字符概率:

    b-----------------29
    f-----------------23
    e-----------------14
    h-----------------11
    d-----------------8
    c-----------------7
    a-----------------5
    g-----------------3

    霍夫曼树为:

    所以高度是4

  • 相关阅读:
    Python基础---线程
    virtualenv和virtualenvwrapper的安装和使用
    微信公众号实现简易的物联网控制(二)
    PyQt5之SQLite数据库操作(1)
    PyQt5无边框后窗口的移动方法
    PyQt5显示GIF图片
    Python显示进度条的方法
    WinSCP默认使用root用户登录的方法
    微信公众号实现简易的物联网控制(一)
    Arduino语音天气预报(三)
  • 原文地址:https://www.cnblogs.com/Mr-Wenyan/p/8665457.html
Copyright © 2011-2022 走看看