• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 霍夫曼编码的符号频数压缩到可用一个字节8位表示时,霍夫曼编码最多能有多少位?

霍夫曼编码的符号频数压缩到可用一个字节8位表示时,霍夫曼编码最多能有多少位?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了霍夫曼编码的符号频数压缩到可用一个字节8位表示时,霍夫曼编码最多能有多少位?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:霍夫曼编码的符号频数压缩到可用一个字节8位表示时,霍夫曼编码最多能有多少位?
描述:

即符号频数在0-255之间,频数越高霍夫曼编码越短,反之越长.这里假设一共有256个不同的字符,我认为如果这256个字符出现的频数都相同的话,它们的霍夫曼编码应该都是8位.而我想问这256个字符出现频数不同的情况下,最长的霍夫曼编码能有多少位?


解决方案1:

以下是没有100%把握的分析。

首先基于以下两个前提进行讨论:

  1. 零频度的字符不存在编码,不出现在Huffman树中,实际使用的频度最低为1。
  2. Huffman树生成算法在遇到森林中多个树的权重相同时,合并深度最低的两个树,保证最终生成的Huffman树总高度最小。

从Huffman树的生成反推。显然合并次数是固定的255次。则如果想制造较长的Huffman树,目标就是很明显的:尽可能让每次合并时,森林中最深树的深度仍能+1。观感上是尽量每次都让单节点并入最长的树。

从[1, 1, 1]开始,这三个节点肯定能形成树( ( (1) 2 (1) ) 3 (1) )。

则如果想挂入一个叶节点,和根节点3合并形成新的根,这个叶节点的值必须比已存在树中最大的枝叶节点还要大。在这里就是大于1,2,1,1取3,形成以下的树:

1 - 2 - 3 - 6
    |   |   |
    1   1  [3]

不能小于枝叶节点是当然的。等于也不行,因为如果相等,新加入的节点就会由于深度为0的原因,比已存在的节点在合并中占有优势,从而破坏预计的合并过程。例如在上边的例子中如果敢取2就会……

        5
      / |
1 - 2   3
   /  / |
  1  1 [2]

所以按照这个规律生成:

a=[1,2,3,6]; b=[1,1,3];
while b[-1] < 256:
    b.append(max(a[:-1] + b) + 1)
    a.append(a[-1] + b[-1])
print(a) # [1, 2, 3, 6, 10, 17, 28, 46, 75, 122, 198, 321, 520, 842]
print(b) # [1, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322]

这表示了这样一棵树,高度为12,使用了13个叶子节点:

1-2-3-6-10-17-28-46-75-122-198-321-520
  | | |  |  |  |  |  |   |   |   |   |
  1 1 3  4  7 11 18 29  47  76 123 199

在叶子权重255的限制下,不能继续生成下去了。此时还剩下243个字符没有使用过,而这243个字符的权重都不能低于199(不破坏已有树的存在性)。

则这243个字符应该会生成一个深度为8的完全二叉树(不是也差不多),然后这个长链挂在其中的某个节点上,很有可能挂在倒数第二层(而不是最底层)。

没有进一步更深入的研究。定性的来看,已经可以估计最后的这个值应该在12+8-1=19左右。

解决方案2:

我也知道了,根据熵来算的.256个字符出现的频数都不一样的情况下,霍夫曼编码为最佳且能得到最长编码位数.
也就是说频数为1-255,总和就是(1+255)*256/2=32768.
其中频数为1的符号需要的编码位数最多,熵为-lg(1/32768)=15,因为实际位数会有(+-)1的出入,所以最多为15+1=16位


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 霍夫曼编码的符号频数压缩到可用一个字节8位表示时,霍夫曼编码最多能有多少位?

相关文章

  • 2017-06-07 请问在哪些情况下,必须重启Jboss?
  • 2017-06-07 js数组js数组迭代方法
  • 2017-06-07 AT&T汇编,能否在代码里面嵌入数组实现?发现会崩溃
  • 2017-06-07 redis如何获取某个db的内存占用大小?
  • 2017-06-07 preg_replace如何在第N张图片后插入内容呢??
  • 2017-06-07 python数据结构转换,将线性元祖转换成字典树
  • 2017-06-07 python的csv库如何写成多列数据?
  • 2017-06-07 python爬虫(python)如何交换两个shelve对象?
  • 2017-06-07 401unauthorized
  • 2017-06-07 能直接给个http的地址进行图片上传么

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • WINDOWS多线程疑难
    • (flask)gunicornreload选项为什么是无效的呢?
    • (flask)POST消息到后台一直提示400BADrequest
    • xlsx转xlspython如何对xlsx文档进行操作
    • mac安装win7mac下怎么安装更低版本的php5512?
    • 有没有纯用python实现的生产性服务器,支持django?
    • 计算机使用8bit作为一个单元,历史原因有哪些?
    • 如何查看Python内建函数的实现代码?
    • 知道网易的闪电邮的技术内幕吗?
    • (redis)使用django做后台管理方面的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有