哈夫曼编码最大编码长度

2023-11-17

概念

层数:叶子节点为待编码的数据,根为第0层.
编码长度:第 L L L层数据编码后的长度为 L L L.
节点概率:若节点为叶子节点,则概率为叶子所编码数据的频率 f i f_i fi.或者一种不太严谨的方式,叶子节点的概率为所编码数据的概率 p i p_i pi.若节点为非叶子节点,概率为两个子节点的概率之和.

定理

定理1: 在哈夫曼树的构造过程中,高层节点的概率不高于低层节点的概率
定理2: 哈夫曼树根节点的概率为1
定理3: 若某个节点概率为 p p p,长度为 L L L,那么这个节点的概率满足
L ≤ lg ⁡ 1 p + 1 L\le \lg\frac{1}{p}+1 Llgp1+1

p ≤ ( 1 2 ) L − 1 p\le (\frac{1}{2})^{L-1} p(21)L1

例如,频率超过0.5的数据编码长度不会超过1,频率超过0.25的数据编码长度不会超过2等

定理3的证明:
使用反证法.若第l层的节点N不满足定理2,即
p l > ( 1 2 ) l − 1 p_l>(\frac{1}{2})^{l-1} pl>(21)l1
根据定理1,N的父节点与N父节点的兄弟节点的概率不会小于 ( 1 2 ) l − 1 (\frac{1}{2})^{l-1} (21)l1,即N的爷爷节点概率不会小于 2 ⋅ ( 1 2 ) l − 1 2\cdot (\frac{1}{2})^{l-1} 2(21)l1.利用数学归纳法易得,N第j层的祖先节点(j<l)满足关系
p j &gt; 2 l − j − 1 ⋅ ( 1 2 ) l − 1 = ( 1 2 ) j p_j&gt;2^{l-j-1}\cdot (\frac{1}{2})^{l-1}= (\frac{1}{2})^{j} pj>2lj1(21)l1=(21)j
这个式子表面第0层的概率 p 0 &gt; ( 1 2 ) 0 = 1 p_0&gt; (\frac{1}{2})^{0}=1 p0>(21)0=1,与定理2矛盾.因此定理3总成立.

最大编码长度

哈夫曼编码后数据的长度计算方式为,对每一个数据出现的频率与数据编码长度求积,这些积的和即为编码长度.若第i个数据出现的概率为 p i p_i pi,长度为 L i L_i Li,则编码长度为
L = ∑ i p i ⋅ L i L=\sum_i p_i\cdot L_i L=ipiLi
根据定理3,哈夫曼编码后的数据长度不会超过
∑ i p i ( lg ⁡ 1 p i + 1 ) = ∑ i p i lg ⁡ 1 p i + ∑ i p i = ∑ i p i lg ⁡ 1 p i + 1 \sum_i p_i(\lg\frac{1}{p_i}+1)=\sum_i p_i\lg\frac{1}{p_i}+\sum_i p_i=\sum_i p_i\lg\frac{1}{p_i}+1 ipi(lgpi1+1)=ipilgpi1+ipi=ipilgpi1+1
单位为bit.注意到第一项是所谓的信息熵.若 p i p_i pi全部都为 1 / 2 1/2 1/2的幂次(即 p i = 1 / 2 k , k ∈ N p_i=1/2^k,k\in N pi=1/2k,kN),则哈夫曼编码后的长度为 ∑ i p i lg ⁡ 1 p i \sum_i p_i\lg\frac{1}{p_i} ipilgpi1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈夫曼编码最大编码长度 的相关文章

  • LightOJ 1045 Digits of Factorial

    Problem acm hust edu cn vjudge problem visitOriginUrl action id 26765 分析 在base进制下 pow base x 表示最小的 x 1 位数 pow base x 1 表
  • AI笔记: 数学基础之正交矩阵与矩阵的QR分解

    正交矩阵 若n阶方阵A满足 A T A E A TA E ATA E 则称A为正交矩阵 简称正交阵 复数域上称为酉矩
  • 为什么配方法化二次型为标准型一定可以做到可逆线性变换

    定理 对任意一个 n 元二次型 f x 1 x 2
  • 时间序列的特征工程——一些总结

    一个说法在最前面 创造新的特征是一件十分困难的事情 需要丰富的专业知识和大量的时间 机器学习应用的本质基本上就是特征工程 Andrew Ng 大佬整理的一个时间序列预测方法总结 时间序列预测方法总结 知乎 特征工程的流程介绍 关于做特征工程
  • 【SSL_1232】雷达覆盖

    思路 以一个点作为平角 计算几何统计 c o d e code code include
  • [人工智能-数学基础-1]:深度学习中的数学地图:计算机、数学、数值计算、数值分析、数值计算、微分、积分、概率、统计.....

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119710145 目录 1 为
  • 排列的生成(二) —— 序数法

    1 定义 n n n个元素的全排列有 n n n 个 如果将排列按顺序编号 并能够按照某种方法建立起每一个序号与一个排列之间的对应关系 那么就可以根据序号确定排列 反过来也可以根据排列确定它的序号 根据排列的序号生成对应排列的方法就称为序数
  • games103 物理模拟第三节笔记补充

    矩阵求逆直接法 1 LU分解 2 LDLT分解法 3 Cholesky分解 4 QR分解 5 SVD分解 6 Jordan分解 关于LU分解 LU分解的矩阵稀疏性与矩阵A的排列顺序有关 在这个领域 matlab提供了一套较好的解决方案 LU
  • 如何用硬币模拟1/3的概率,以及任意概率?

    突然想起一个挺有意思的事 如何用硬币模拟1 3的概率 甚至任意概率 之前和朋友偶然间谈到如何用硬币模拟任何概率 当时以为是不可能的 因为硬币有两面 模拟的结果底数一定是2 n 今天又回顾了某个经典的条件概率问题 突然想到用硬币模拟任意概率是
  • 线性代数的几何意义(一)——线性代数的意义

    线性代数的几何意义 一 一 线性 代数 的意义 何为 代数 代数 一词的英文是Algebra 源于阿拉伯语 其本意是 结合在一起 就是说代数的功能就是把许多看似不相关的事物 结合在一起 也就是进行抽象 抽象的目的不是故弄玄虚 而是为了更好的
  • 关于suitesparse在windows平台下速度极慢以及奇奇怪怪的问题解决

    前言 好像suitesparse原本没有windows版本 然后国外一个大佬写了cmake搞出来的 所以可能存在一些奇奇怪怪的问题吧 主要是一下两点 1 windows相比linux环境速度奇慢 2 新手编译这个库经常会下载suitespa
  • 牛顿迭代法原理讲解

    牛顿迭代法原理讲解 牛顿迭代法是用于求解等式方程的一种方法 类似于求解F x 0的根 牛顿迭代法求解的是近似根 这个想法准确来说来源于泰勒展开式 我们知道 有些时候 我们需要求解的表达式可能非常复杂 通过一般的方法 我们很难求出它的解 所以
  • 生态系统过程模型

    生态系统过程模型 根据生态系统的生理生态学特性 结合影响生态系统过程的观测指标 提出的能够反映生态系统过程的机制模型 统计模型 stochasticmodel statisticmodel probabilitymodel 指以概率论为基础
  • 三角函数与反三角函数的关系及图像

    文章目录 TOC 1 正弦函数 sin x 反正弦函数 arcsin x 2 余弦函数 cos x 反余弦函数 arccos x 3 反正弦函数 arcsin x 反余弦函数 arccos x 4 正切函数 tan x 余切函数 cot x
  • 哈夫曼编码最大编码长度

    概念 层数 叶子节点为待编码的数据 根为第0层 编码长度 第 L L L层数据编码后的长度为 L L L 节点概率 若节点为叶子节点 则概率为叶子所编码数据的频率
  • Dijkstra与Bellman-Ford算法对比

    文章目录 TOC Dijkstra Dijkstra 伪代码 Dijkstra 为什么不能有负权重 Dijkstra算法复杂度 Bellman Ford算法 Bellman Ford算法伪代码 Bellman Ford判断是否有负权 Bel
  • 【华为OD机试真题 python】二进制差异数【2022 Q4

    前言 华为OD笔试真题 python 本专栏包含华为OD机试真题 会实时更新收纳网友反馈 为大家更新最新的华为德科OD机试试题 为大家提供学习和练手的题库 订阅本专栏后可私信进交流群哦 题目仅供参考 千万不要照抄 题目描述 二进制差异数 对
  • 数学篇(二) 方差、标准差、协方差

    1 均值 均值就是将所有的数据相加求平均 求得一个样本数据的中间值 2 标准差 标准差也被称为标准偏差 公式如下所示 简单来说 标准差是一组数平均值分散成都的一种度量 一个较大的标准差 代表大部分数值和其平均值之间差异较大 一个较小的标准差
  • 矩阵求导常用公式

    矩阵求导常用公式 1 引言 2 向量的导数 2 1 向量对标量求导 Vector by scalar 2 2 标量对向量求导 Scalar by vector 2 3 向量对向量求导 Vector by vector 3 矩阵的导数 3 1
  • Matrix calculus(矩阵微积分)(前四节)

    原文地址 https en wikipedia org wiki Matrix calculus 注 不要把它和几何运算或者是向量运算混淆 前言 在数学中 矩阵微积分是进行多变量微积分的一种特殊符号 特别是在矩阵的空间上 它将关于许多变量的

随机推荐

  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • python 读写pcd

    1 读点云的3种方式 第一种 pip3 install python pcl import pcl pcd ndarray pcl load args pcd path to array 3 不要intensity pcd ndarray
  • 浏览器打开就是360导航(浏览器被360劫持)

    浏览器打开就是360导航 这个问题之前只是看别人帖子见到过 不知道出了什么问题我的edge和Chrome浏览器突然打开也成了360的导航页面 这才感觉出这个问题的恶心之处 而且顺道说一下 我电脑中也没有装任何360系的应用 但突然就被改了
  • 黑客基础知识——SYN泛洪攻击原理及防御

    拒绝服务攻击时 攻击者想非法占用被攻击者的一些资源 比如如 带宽 CPU 内存等等 使得被攻击者无法响应正常用户的请求 讲泛洪攻击之前 我们先了解一下DoS攻击和DDoS攻击 这两个攻击大体相同 前者的意思是 拒绝服务攻击 后者的意思是 分
  • docker下mysql镜像初始化

    目录 1 介绍 2 部署及验证 2 1 场景复现 2 2 创建dockerfile 2 3 初始化脚本 2 4 构建镜像并查看 2 5 创建容器并验证 2 6 完成 1 介绍 原理 当Mysql容器首次启动时 会在 docker entry
  • QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据

    QT 多线程中使用QCanBusDevice进行PCAN通讯时 无法正常发出数据 前言 我一开始的代码逻辑是 PCAN开启 关闭 发送 接收这些功能整合在一个工具类中 这个工具类的对象是在主线程创建的 然后我有一个要循环定时发送的功能是独立
  • ASP.NET Core错误:Unable to cast object of type ‘System.Data.ProviderBase.DbConnectionClosedConnecting‘

    项目场景 在使用 net core开发时 经常使用数据库出现的问题 问题描述 开发ASP NET Core时遇到在经常使用数据库连接时报错误提示 Unable to cast object of type System Data Provi
  • QCefView源码优化

    QCefView项目源码的构建部分这里就不赘述了 有问题的朋友可以回到 QCefView 1 CMAKE项目 库文件生成和项目测试 查看相关介绍 本次优化主要包括以下几个部分 1 设置部分 关闭代理服务器 关闭同源策略 使用系统flash等
  • 不断完善

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 最简单的网页下载代码 import urllib2 使用urllib2模块 from sys import argv script urlo argv def down
  • 【核磁共振成像】部分傅里叶重建

    目录 一 部分傅里叶重建 二 部分傅里叶重建算法 2 1 填零 2 2 零差处理 一 部分傅里叶重建 在部分傅里叶采集中 数据并不是绕K空间中心对称收集的 而是K空间的一半是完全填充的 另一半只收集了一小部分数据 部分傅里叶采集所依据的原理
  • 公钥私钥证书与https

    公钥私钥 非对称加密 在一个过程中使用两个密钥 公共密钥用于加密信息 私用密钥用于解译加密的信息 这种加密方法称为非对称加密 也称为公钥加密 因为其中一个密钥是公开的 另一个私钥则需要自己保密 私钥签名 如果我用私钥加密一段数据 当然只有我
  • Request 获取请求数据(方法)

    1 Request 继承体系 2 Request 获取请求数据 2 1 请求行 String getMethod 获取请求方式 GET String getContextPath 获取虚拟目录 项目访问路径 request demo Str
  • java占用cpu最高的线程堆栈信息

    jstack找出占用cpu最高的线程堆栈信息 package com example demo public class Math public static final int initData 666 public int comput
  • Swagger3的使用

    本篇涉及到的swagger注解 速记 EnableSwagger2 开启swagger EnableOpenApi 开启swagger的Api功能 EnableWebMvc 是为了解决swagger和springmvc整合之后总是出现空指针
  • 解决idea打不开的两种可能性

    一 如果 IDEA 下载完成后打不开 可能是因为 dea64 exe vmoptions 文件中保留了之前版本的破译配置 注释或者删除就可以了 1 打开 C Users Administrator AppData Roaming JetBr
  • python stm32-STM32 上面跑Python

    By Derrick Wang 之前我一直在找一种方案 可以把stm32打造成一个真正的创客平台 因为传统的开发环境安装编译 眼花缭乱的工具栏和按钮并不实用于非电子类专业的爱好者设计出自己的作品 这样的高门槛把很多有兴趣者拒之门外 一个没有
  • UDP协议介绍

    UDP 是一个简单地面向数据报的运输层协议 进程的每个输出操作都正好产生一个 UDP 数据报 并组装成一份待发送的 IP 数据报 UDP 不提供可靠性 它把应用程序传给 IP 层的数据发送出去 但是并不保证他们能到达目的地 UDP数据报封装
  • [蓝桥杯] 分数 (Python 实现)

    题目 代码 b 0 a 1 for i in range 0 20 b a a 2 print d d b a 2 结果 1048575 524288
  • C++案例

    目录 一 while循环猜数组 二 水仙花数 三 for循环敲桌子游戏 四 9 9乘法表 五 一维数组 元素逆置 六 冒泡排序 七 封装一个函数 利用冒泡排序 实现对整型数组的升序排序 八 结构体嵌套结构体 九 结构体排序 一 while循
  • 哈夫曼编码最大编码长度

    概念 层数 叶子节点为待编码的数据 根为第0层 编码长度 第 L L L层数据编码后的长度为 L L L 节点概率 若节点为叶子节点 则概率为叶子所编码数据的频率