2 熵与编码

article/2025/9/30 8:33:21

先来尝试编码一副扑克牌,首先考虑花色+rank的方式编码,如下图,即第一张牌是0,最后一张是51(一共52张牌)
在这里插入图片描述
在一个集合中,假设最大元素为M,那么我们对M编码需要的最小编码长度为log2M(用二进制表示这个数字),我们将这个数字称为最坏编码长度
在这里插入图片描述
常见的最坏编码长度:掷硬币:log2 = 1,掷骰子:log6=3,轮盘赌:log37 = 6

编码新思路:用的频繁的字符应该给更短的长度,这样会缩短总编码长度。
目标:使编码的平均长度的期望最小,即:最小化在这里插入图片描述
在这里插入图片描述
因此引入香农熵的定义,先对一个随机变量的熵进行定义
常见的香农熵:掷硬币:1,不公平硬币(0.9对0.1):0.47(熵小因为确定性提高),对这个不公平硬币编码会更容易,因为大部分时间我们都是对的
另,硬币变量叫做伯努利服从伯努利分布,两项,和为一
掷骰子:H = 2.58

可以发现,当随机变量等于所有值N的概率相等时,他的值为logN,即为最坏长度(最坏熵)
在这里插入图片描述
零阶经验熵:没有先验概率,通过给的例子来统计概率,然后计算熵

熵可以告诉我们,平均编码长度应该是多少,但无法告诉我们如何设计

  • 对比熵公式和长度公式,或许1/pr就是我们要的长度

对于例子:1/2, 1/4, 1/8, 1/8

  • 第一种:0, 10, 110, 111
    aagc = 0011010,明显是可以解码的,因为这种编码保证每个编码没有相同前缀,导致无歧义
    当有前缀相同,也可能是无歧义的,但需要的解码时间会变长,例:1,10,00
    第一种编码方式也有相同前缀,但一定要保证下一位相同
    或者说,特点是第一种编码是prefix-free的,即没有一个编码是另一个编码的前缀,我们称这种编码为前缀码(prefix code)

如何构建前缀码?Huffman tree
在这里插入图片描述
上图为构建过程,其中节点的值为在文本中出现的频次

给左边和右边赋值,即可得到各个子节点的值,注意:非叶子节点没有编码,这是关键
在这里插入图片描述
在这里插入图片描述此外,Huffman code更优秀之处在于,他最多只会比最佳零阶经验熵多一位(每个字符的编码)
还有更好的编码形式,如arithmetic coding,这里不涉及了


http://chatgpt.dhexx.cn/article/r4S9Uawq.shtml

相关文章

编码原理详解(五)---熵编码(CAVAL)

上一篇我们讲到了ZigZag扫描,经过这一扫描之后,发现原本是4*4的像素矩阵,就变成了一连串的数字,可以说是二维到一维的一个转换吧,而且经过ZigZag扫描后,一连串的数字的最后大部分为0,以及一些1,…

信息熵与编码定理

惊奇度与信息量 定性描述 惊奇度:一个事件的惊奇度是指该事件发生时我们所感到的惊奇程度 信息量:一条信息的信息量是指该信息所含信息的多少。一条信息越是让我们感到惊奇,它所含信息量就越大 对于一个掷骰子的试验,假设E代表掷…

熵编码算法Range encoding工程原理和实现

在压缩算法中,熵编码是其中重要的无损压缩步骤。熵编码算法根据香农定理,对出现概率大的源符号用较少的编码符号进行编码,对概率小的源符号用较多的编码符号进行编码,尽可能地逼近压缩的极限。 目前各类压缩工具使用的熵编码算法主…

七、熵编码算法(1):基础知识

一、熵编码的概念 熵 化学和热力学,用于度量能量退化的指标熵越高,物体或系统的做功能力越低 信息学中的熵 表示信源所发出信息的不确定性越是随机的、前后不相关的信息,其熵越高 信源编码定理 说明了香农熵与信源符号概率之间的关系信息的熵…

【Codecs系列】CABAC熵编码详解

Date: 2018.5.9 转载自:https://blog.csdn.net/listener51/article/details/60970635 目录 1. 信息熵的概念 2. 定长编码 3. 变长编码 3.1 哈夫曼编码 3.2 算术编码  3.2.1 传统编码方法 3.2.2 算术编码 3.2.3 二进制算术编码 4. …

第8章 熵编码

http://www.cnblogs.com/xkfz007/archive/2012/07/29/2614250.html 1. 熵编码 熵(Entropy):信源的平均信息量,更精确的描述为表示信源所有符号包含信息的平均比特数 信源编码要尽可能的减少信源的冗余,使之接近熵 用…

熵编码之CABAC

CABAC(Context-based Adaptive Binary Arithmetic Coding),基于上下文的自适应二进制算术编码。CABAC是H.264/AVC标准中两种熵编码中的一种,它的编码核心算法就是算术编码(Arithmetic Coding)。 算术编码 传…

信息熵、编码冗余/信息熵冗余、压缩与解压缩速度

信息熵:是指数据所带的信息量。信息量与信源包含的事件发生的概率有关,事件概率越大,信息量越小;事件概率越小,信息量越大。将信源所有可能事件的信息量进行平均,就得到信息的熵(Entropy&#x…

信息熵和压缩编码

目录 一、信息熵是什么?二、两种编码压缩2.1 香农-范诺编码简述2.2 特例详解 三、哈夫曼编码3.1 哈夫曼编码简述3.2 特例详解 四、RGB图像压缩 一、信息熵是什么? 信息:信息,指音讯、消息、通讯系统传输和处理的对象,…

6.信息论(一):信息量、熵和最优编码

前言 信息论是由克劳德香农发展,用来找出信号处理与通信操作的基本限制,如数据压缩、可靠的存储和数据传输等。自创立以来,已被应用多个领域,例如自然语言处理(NLP)、机器学习等领域。 定长编码(Block Codes) 让我们从一个例子…

信息熵与编码

文章目录 一、信息熵的概念二、利用编码求压缩率1.香农-凡诺编码2.霍夫曼编码 三、实验证明图像字节四、文献参考 一、信息熵的概念 信息是个很抽象的概念。人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。比如一本五十万字的中文书到…

熵编码原理

熵编码原理 一.熵编码原理1.原理介绍2.常见方案3.整数位元法4.熵编码模型二.熵编码CABAC介绍1.二进制化2.上下文建模3.二进制算术编码常规编码区间重归一化旁路编码 一.熵编码原理 1.原理介绍 熵编码即编码过程中按熵原理不丢失任何信息的编码。信息熵为信源的平均信息量&…

熵编码:CABAC

基于上下文的二进制算术编码(Context-Based Adaptive Binary Arithmetic Coding,CABAC)将自适应二进制算术编码和上下文模型相结合。是H.265/HEVC的主要熵编码方案。 主要包括三个步骤: 二进制化; 上下文建模; 二进…

熵编码:算术编码

算术编码不是简单的将每个信源符号映射成一个码字,而是对整个输入序列分配一个码字,所以平均意义上可以为每个信源符号分配长度小于1的码字。 算术编码操作简单,下面以一个实例讲解算术编码的原理: 设信源有a,b,c,d四种符号&…

GitLab-CI基础使用总结

思路梳理 下图是GitLab-ci的实现结构图: (实际结构会有出入,画成这样只是便于理解) GitLab:是一个基于 Git 的代码托管平台,提供了代码仓库管理、问题跟踪、CI/CD 等功能。它可以用于团队协作开发、版本控制、代码审查等场景。GitLab-runne…

Git --- Git Gui

目录 1. 创建和删除分支(了解即可) 2. Git Gui 3. 什么是ssh key 4. git/gitee生成密钥并通过 第一步:本地电脑配置 第二步:远程gitee仓库配置 第三步:修改你本地的ssh remote url. 不用https协议,改用git 协议 第四步&#x…

git与gerrit基础概念

序 本文记录了 git 与 gerrit 学习所得 重点关注于当前所用到的实际操作部分,其余理论部分以及更复杂用法留待将来用到时继续补充 1 Git 与 Gerrit Git 是当前全世界流行的分布式版本控制工具,但是只适用于纯文本文件,包括markdown、网页、…

Git入门|Git的基本用法(一)

1. Git的安装 首先在安装之前确认一下系统有没有安装Git。在Terminal中输入: git --version若确认系统没有安装git,可通过以下指南安装: Getting Started - Installing Git 2. 创建本地Git库 每次进行新项目时,都需要创建一个…

Gitlab-CI入门配置

Gitlab-CI使用及.gitlab-ci.yml配置 Gitlab-CI/CD 持续集成测试篇 Gitlab-CI/CD使用场景在这里插入代码片 首先,公司使用Gitlab作为工作仓库进行代码发布及版本控制,Gitlab内置了CI/CD的工具,这些工具可以用于代码提交的同时完成镜像构建、…

Gitlab CI/CD:入门指南

功能概览 CI/CD工作流 上图是基本的CI/CD工作流,与之对应的,gitlab几乎提供了上述流程节点所需的所有相关功能: 阶段功能 1. Verify 通过持续集成自动构建和测试你的应用程序 使用GitLab代码质量(GitLab Code Quality&#xff09…