zoukankan      html  css  js  c++  java
  • 贪婪技术之 huffman编码树

          不同于对字符使用定长编码,huffman编码法使用“频繁出现的字符占用更短的位数,不频繁出现的字符占用更长的位数”的方法,来实现编码压缩。

          首先对于text中的所有字符,我们统计每个字符出现的频率,例如:

          huffman算法描述:

          第一步,初始化n个单节点的树(森林),为它们标上字母表中的字符,并把每个字符的频率都记在树的根中,用来指出树的权重。

          第二步,重复以下步骤,当森林中只剩下一颗树时,算法结束。找到两棵权重最小的树,把它们作为左右子树,构建一棵新的树,然后新的树的权重为两棵子树权重之和。

          画图表示:

     

          至此,我们就构造出了一颗二叉huffman树。现在我们让每个节点的左边子树为0,右边子树为1,则当一个字符在某一个叶子时,huffman树根到该叶子的路径所构成的编码,就是该字符的huffman编码。

          例子中每个字符对应的编码为

     

          明显,在huffman编码下,每个字符的编码都不可能是另一个字符的编码的前缀。因此,只要保存了huffman编码树,就能保证在变长编码下,能顺利解码。从而,huffman编码能有效实现文本信息的压缩。

          因为huffman编码树建树的过程,选择的都是最小的频率的两个字符,因此huffman编码方法是一种使编码长度最短的方法。

  • 相关阅读:
    c++MMMMM:oo
    pytorch简单框架
    第95:PCA
    P1:天文数据获取
    深度学习常用函数记录(tensorflow)
    流畅的python(一)序列构成的数组
    tensorflow2.0学习笔记(一)
    BiseNet阅读总结
    DenseASPP论文总结
    论文写作总结
  • 原文地址:https://www.cnblogs.com/banyu/p/4961303.html
Copyright © 2011-2022 走看看