社区首页 >问答首页 >用于无损压缩的Huffman编码

用于无损压缩的Huffman编码
EN

Stack Overflow用户
提问于 2011-04-15 03:57:39
回答 3查看 2.1K关注 0票数 0

我真的需要帮助霍夫曼编码的无损压缩。我有一个考试即将到来,需要理解这一点,谁知道容易教程,以理解这一点,或谁可以解释。

考试中的问题很可能是:

假设字母表为A,B,C,已知概率分布为P(A)=0.6,P(B)=0.2,P(C)=0.2。为了简单起见,我们还假设编码器和解码器都知道消息的长度总是3,所以不需要终止符。

  1. 通过Huffman编码编码消息ACB需要多少位?您需要为每个符号提供Huffman树和Huffman代码。(3分)
  2. 通过算术编码对消息ACB进行编码需要多少位?您需要提供编码过程的详细信息。(3分)
  3. 利用上述结果,讨论了算术编码相对于Huffman编码的优越性。(1标记)

答案:

  1. 哈夫曼代码:A-1,B-01,C-00.编码结果为10001,因此需要5位。(3分)
  2. 算术编码的编码过程:符号低、高范围、0.01.0A0.00.6C、0.480.60.12B、0.552、0.576、0.024最后二进制码字为0.1001,即0.5625。因此,需要4位。(3分)
  3. 在Huffman编码中,每个符号的码字长度必须是整数。但是在算术编码中它可以是分数的。因此,算术编码通常比Huffman编码更有效,如上面所示。(1标记)
EN

回答 3

Stack Overflow用户

发布于 2011-04-15 07:01:39

编码

如果您查看树(右上),您将看到每个父节点都是它下面两个节点的之和。节点处的值是字母的频率。二进制序列中的每个位都是树中的一个右/左分支。

这有用吗?

我对算术编码并不十分了解,但它看上去很聪明。

票数 2
EN

Stack Overflow用户

发布于 2011-12-07 09:43:33

Huffman树是一种二叉树,其节点表示流中分布最高的值在根附近被压缩,而值的分布越来越远离根,从而允许以较短的位字符串编码更多的公共值,而在较长的字符串中编码较少的公共值。

赫夫曼树的构造如下:

  1. 在源流中构建一个实体表,其中包含它们的分布。
  2. 选择表中具有最低分布的两个条目。
  3. 从这两个条目中创建一个树节点。
  4. 从表中删除刚才使用的条目。
  5. 向表中添加一个新条目,将刚刚删除的节点以及树节点的组合分布添加到表中。
  6. 如果表中还有多个条目,请转到步骤2。
  7. 表中留下的条目是根。
票数 1
EN

Stack Overflow用户

发布于 2011-12-07 09:16:01

基本的huffmann实现可以很好。但是,如果您是从头开始构建的,您可能需要工具箱中的其他一个以上的数据结构来简化工作,比如minHeap和位向量。编码和解码的基本算法非常简单。没有与算术编码相比较的信息。

实现示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5676353

复制
相关文章
在Go中如何正确重试请求
我们平时在开发中肯定避不开的一个问题是如何在不可靠的网络服务中实现可靠的网络通信,其中 http 请求重试是经常用的技术。但是 Go 标准库 net/http 实际上是没有重试这个功能的,所以本篇文章主要讲解如何在 Go 中实现请求重试。
luozhiyun
2022/09/21
2K0
在Go中如何正确重试请求
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
子润先生
2021/06/21
7940
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
程序那些事
2021/02/17
1.8K0
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
程序那些事
2021/02/25
1.1K0
gradle中的增量构建
【韧性设计】韧性设计模式:重试、回退、超时、断路器
软件本身并不是目的:它支持您的业务流程并使客户满意。如果软件没有在生产中运行,它就无法产生价值。然而,生产性软件也必须是正确的、可靠的和可用的。
架构师研究会
2022/05/25
1.3K0
【韧性设计】韧性设计模式:重试、回退、超时、断路器
Maven进行增量构建
如果要开始任何新的基于Java的项目,则gradle应该是第一选择,但是某些场景或者某些方面,Maven依然有着不错的优势。在编译构建项目时,就会需要一些插件来提供不同的功能支持。
FunTester
2020/04/03
2.8K0
如何让 Gitlab 的 Runner 在构建时拉取 Git Submodules 仓库
默认的 GitLab 的 Runner 在构建时不会去拉取 Git Submodules 仓库,将会提示 Skipping Git submodules setup 跳过初始化 Git Submodule 仓库
林德熙
2021/04/02
2.3K0
原来Kylin的增量构建,大有学问!
本篇博客,博主为大家介绍的是关于Kylin的增量构建的步骤过程,以及其与全量构建的差异对比!看完之后,相信你也一定能够感受到这里面的大学问~
大数据梦想家
2021/01/27
8230
原来Kylin的增量构建,大有学问!
在选择云区域时如何做出最明智的选择
云计算的优势之一是公有云供应商提供了数十个云区域供企业决定在哪里托管工作负载时进行选择。选择正确的云区域对于优化成本、性能、可靠性等很重要。不要默认使用离企业最近的云区域或云计算提供商建议的任何云区域,而是进行研究以确定哪个(或多个)区域可以提供最佳的价值和性能。
静一
2021/07/30
9480
Java函数调用重试的正确姿势
核心功能 提供重试工具类, 支持传入操作、重试次数和延时时间。 支持定义不再重试的异常和条件。
明明如月学长
2021/08/27
2.4K0
etl 增量对比解决方案 etl-engine 如何实现增量对比
模拟一个使用场景,业务系统A表中的数据要同步到数据仓库B表中(最简单的样例是A表与B表结构完全一样),
威哥
2023/03/15
8780
etl 增量对比解决方案 etl-engine 如何实现增量对比
如何在Vue中使用云开发的云函数,实现邮件发送
云开发的云函数能够让我们无需购买和管理服务器,就能够实现一些前端做不了,必须在服务端做的复杂操作,让我们大大降低了运维成本。本篇将会为您讲解,如何在前端主流框架Vue中使用云开发的云函数。 通过本篇您将可以学习到: 如何创建云开发环境 如何在Vue中使用云开发 如何在Vue中利用云开发的云函数,实现邮件的发送 1.创建云开发环境 打开云开发控制台地址:https://console.cloud.tencent.com/tcb,点击新建云开发环境 创建云开发环境 创建后进入控制台首页,复制环境ID保
腾讯云开发TCB
2020/09/14
3.7K0
Flowable 任务如何认领,回退?
上篇文章松哥和大家分享了 Flowable 中设置任务处理人的四种方式,不过那四种方式都是针对单个任务处理人,有的时候,一个任务节点会存在多个候选人,例如 zhangsan 提交一个任务,这个任务即可以 lisi 处理,又可以 wangwu 处理,那么针对这种多个任务候选人的情况,我们该如何处理?今天一起来看看。
江南一点雨
2023/01/04
1.5K0
Flowable 任务如何认领,回退?
Git 如何优雅的版本回退?
在版本迭代开发过程中,相信很多人都会有过错误提交的时候(至少良许有过几次这样的体验)。这种情况下,菜鸟程序员可能就会虎驱一震,紧张得不知所措。而资深程序员就会微微一笑,摸一摸锃亮的脑门,然后默默的进行版本回退。
grain先森
2019/05/07
2K0
Git 如何优雅的版本回退?
上传Maven组件时不断重试&Broken pipe
在云服务器(公网)上装了Nexus作为Maven私服,Nexus使用Nginx代理
码代码的陈同学
2018/06/03
3.1K0
私有存储云如何构建?
构建内部的云存储必须考虑到弹性、选择正确的平台、支持工作流,以及批量部署和跟公有云的集成。 随着时间的推移,存储即服务的交付进展惊人。如今,公有云,如Amazon Web Services和Micro
静一
2018/03/27
15.9K0
如何优雅的进行错误重试
如何优雅的进行错误重试 最近在爬取豆瓣电影所有演员和导演信息的过程中,遇到了一个小问题,目前豆瓣网页端的反爬还是很强的,只有使用代理IP来进行爬取,那么关键的问题来了,即使使用代理IP,也不能100%保证每次请求的不出错误的,那么如何优雅的进行错误重试呢? Python异常判断 Python3版本为我们提供了简单明了的控制语句,即try...except...else,别小看else的加入,我们可以使用它来干很多事。else中的代码只有在没有任何异常发生的情况下才会执行,下一小节我们来看一下,真实业
嘉美伯爵
2021/01/21
4340
聊聊Asp.net Core中如何做服务的熔断与降级
而对于微服务来说,熔断就是我们常说的“保险丝”,意为当服务出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作造成系统的“雪崩”;或者大量的超时等待导致系统卡死等情况,很多地方也将其成为“过载保护”。
乔达摩@嘿
2023/07/21
3730
聊聊Asp.net Core中如何做服务的熔断与降级
在运行时与构建时如何保护云计算基础设施
在当今的云原生世界中,随着基础设施的飞速发展,大规模构建云计算环境需要可再现性和弹性,因此需要从一开始就优先考虑快速更改和扩展基础设施的能力。
静一
2020/07/16
1.2K0
77.9K Star 的 Axios 项目如何优雅实现请求重试
项目中,经常会有很多用户的网络抽风或者各种原因造成偶发性的网络异常请求错误,如果没有重试机制,有时候体验就比较糟糕。这个时候实现网络错误请求错误重试也能比较好的解决这种偶发场景。
ACK
2020/11/24
3.5K0

相似问题

云函数,部署函数时重试失败重置

27

云函数何时重试?

22

如何计算合流云http宿连接器的最大重试次数和重试回退配置?

226

Kong + Lambda插件-如何开启重试?

10

装配函数的回退实现

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文