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

article/2025/9/30 8:50:50

一、熵编码的概念

    • 化学和热力学,用于度量能量退化的指标
    • 熵越高,物体或系统的做功能力越低
  • 信息学中的熵
    • 表示信源所发出信息的不确定性
    • 越是随机的、前后不相关的信息,其熵越高
  • 信源编码定理
    • 说明了香农熵与信源符号概率之间的关系
    • 信息的熵为信源无损编码后的平均码字长度的下限
    • 任何的无损编码方法都不可能使编码后的平均码长小于香农熵,只能使其尽量接近

在这里插入图片描述
  前面的表述球之间的关系相对于后面这个是比较繁琐的,而且由于前面的排列之间没有任何的规律,进行改进和压缩的空间也就比较小了;因此:混乱程度高的信源,所表达的信息更难被压缩,熵也更高

  • 基本思想
    • 使其前后的码字之间尽量更加随机,尽量减小前后的相关性,更加接近其信源的香农熵
  • 常用熵编码算法
    • 变长编码:运算复杂度和编码效率都比较低,常用方法:哈夫曼编码、香农-费诺编码等;
    • 算术编码:运算较复杂,但编码效率更高

二、熵编码的简单实现——哈夫曼编码

  • 哈夫曼编码
    • 变长编码方法的一种,依赖于码字出现的概率来构造整体平均长度最短的编码方法
    • 关键步骤:建立符合哈夫曼编码规则的二叉树,该树又称作哈夫曼树
  • 哈夫曼树:
    • 一种特殊的二叉树,其终端节点的个数与待编码的码元的个数等同,而且每个终端节点上都带有各自的权值
    • 每个终端节点的路径长度乘以该节点的权值的总和称为整个二叉树的加权路径长度。在满足条件的各种二叉树中,该路径长度最短的二叉树即为哈夫曼树。

在使用哈夫曼编码执行对码元的实际编码过程时,码元的权值可设置为其概率值,那么可以根据其权值来构建哈夫曼树。我们假设使用哈夫曼编码对以下概率的码字进行编码:

码字 概率
A 0.1
B 0.1
C 0.15
D 0.2
E 0.2
F 0.25

根据概率表构建哈夫曼树的过程如下图所示:
在这里插入图片描述
最终我们可以得到如下图所示的哈夫曼树:
在这里插入图片描述
  在哈夫曼树构建完成后,便可以得到每一个码元的哈夫曼编码的码字。具体方法是:从哈夫曼树的根节点开始遍历,直至每一个终端节点,当访问某个节点的左子树时赋予码字0,访问右子树时赋予一个码字1(反之亦可),直到遍历到终端节点时这一路径所代表的0和1的串便是该码元的哈夫曼编码码字。
  例如上图的哈夫曼树,根节点访问左子树ABCF,赋予码字0;然后再访问左子树ABC,赋予码字0,此时整个码字为00,然后访问右子树得到终端节点C,赋予码字1,此时便可以得到C的哈夫曼编码码字001。以此规律,整个六个元素的码元集合的编码码表为:

A: 0000
B: 0001
C: 001
D: 10
E: 11
F: 01
  从这个码表中还可以看出另外一个规律:哈夫曼编码的任意一个码字,都不可能是其他码字的前缀。因此通过哈夫曼编码的信息可以紧密排列连续传输,而不用担心解码时的歧义性


http://chatgpt.dhexx.cn/article/4aTp7K5J.shtml

相关文章

【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…

GitLab-CI 基础介绍

转载自 kubeclub GitLab-CI 工作原理 将代码托管到 git 仓库在项目的根目录下创建 .gitlab-ci.yml 文件,在文件中包含了构建、测试以及部署等脚本,这些脚本被分组为 stage,共同组成了 pipelineGitLab 检测到 ci.yml 文件,使用 G…

GitLab CI Pipeline

GitLab 不单单只是作为一个代码版本控制的仓库,很多场景下使用 GitLab 作为整合 CI 持续集成就 CD 持续发布的工作平台,那么就是 GitLab 的 CI Pipeline 功能了。 CI Pipeline 试想一下,如果开发人员只需要编写代码,而编译、打包…

CICD之 gitlab和gtilab runner

gitlab官网地址 官网文档地址 https://docs.gitlab.com/runner/install/docker.html 一。gitlab 1。gitlab安装 方式一:rpm包安装(centos)1,下载rpm包清华源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/linux命令wget https://mirror…

gitlab-CI入门

gitlab-CI 代码管理自动化部署及消息推送 (1) 通过在项目根目录下配置**.gitlab-ci.yml**文件,可以控制ci流程的不同阶段,gitlab平台会扫描.gitlab-ci.yml文件,并据此处理ci流程。 (2) ci流程在每次团队成员push/merge后之后触发。每当你pu…