5.12 数据结构——哈夫曼编码

2023-11-03

        在远程通讯中,要将待传字符转换成二进制的字符串。

        假设要传输的字符为:ABACCDA;若编码为:A——00;B——01;C——10;D——11。那么要传输的字符的编码为:00010010101100。

        若将编码设计为长度不等的二进制编码,即让待传字符串中出现次数较多的字符采用尽可能短的编码,则转换的二进制字符串便可能减少。

        假设要传送的字符为:ABACCDA;若编码为:A——0;B——00;C——1;D——01。则字符串的编码为:000011010。但是这种编码会出现重码的情况。

关键:要设计长度不等的编码,则必须是任一字符的编码都不是另一个字符的编码的前缀。

哈夫曼编码:

1、统计字符集中每个字符在电文中出现的平均概率(概率越大,要求编码越短)。

2、利用哈夫曼树的特点:权越大的叶子结点离根越近;将每个字符的概率值作为权值,构造哈夫曼树。则概率越大的结点,路径越短。

3、在哈夫曼树的每个分支上标上0或1,结点的左分支标0,结点的右分支标1,把从根到每个叶子结点的路径上的标号连接起来,作为该叶子结点代表的字符的编码。

例:要传输的字符集:D = \left \{ C,A,S,T,; \right \},字符出现的概率:W = \left \{ 2,4,2,3,3 \right \}

如果电文是:\left \{ CAS;CAT;SAT;AT \right \}

那么它的编码是:11010111011101000011111000011000;

反之,若编码是1101000,那么它的译码是:CAT。 

两个问题:

1、为什么哈夫曼编码能保证是前缀编码?

因为没有一片树叶是另一片树叶的祖先,所以每个叶子结点的编码就不可能是其它叶子结点编码的前缀。

2、为什么哈夫曼编码能够保证字符编码总长最短?

因为哈夫曼树的带权路径长度最短,故字符编码的总长最短。

性质1:哈夫曼编码是前缀码。

性质2:哈夫曼编码是最优前缀码。

例子:假设组成电文的字符集D以及其概率分布W为:

D = \left \{ A,B,C,D,E,F,G \right \}

W = \left \{ 0.40,0.30,0.15,0.05,0.04,0.03,0.03 \right \}

设计哈夫曼编码:

 哈夫曼编码的算法实现:

 找到结点的哈夫曼编码要从叶子结点找父结点直到找到根结点。

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

5.12 数据结构——哈夫曼编码 的相关文章

  • 带头双向循环链表:一种高效的数据结构

    博客主页 江池俊的博客 收录专栏 数据结构探索 专栏推荐 cpolar C语言进阶之路 代码仓库 江池俊的代码仓库 编译环境 Visual Studio 2022 欢迎大家点赞 评论 收藏 文章目录 一 带头循环双向链表的概念及结构 二 使
  • 分治—快速选择算法

    文章目录 215 数组中的第K个最大元素 1 题目 2 算法原理 3 代码实现 LCR 159 库存管理 III
  • 算法题-简单系列-07-判断一个链表是否为回文结构

    文章目录 1 题目 1 1 使用list集合判断 1 题目 给定一个链表 请判断该链表是否为回文结构 回文是指该字符串正序逆序完全一致 1 1 使用list集合判断 因为需要判断是否为回文结构 所以要比较头尾的数据 而链表无法随机查询数据
  • 算法设计与实现--贪心篇

    贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法 以期望能够通过一系列局部最优的选择达到全局最优 贪心算法的关键是定义好局部最优的选择 并且不回退 即一旦做出了选择 就不能撤销 一般来说 贪心算法适用于满足以下两个条件的
  • 算法设计与实现--动态规划篇

    什么是动态规划算法 动态规划算法是一种求解复杂问题的方法 通过将原问题分解为相对简单的子问题来求解 其基本思想是将待求解的问题分解为若干个子问题 阶段 按顺序求解子阶段 前一子问题的解 为后一子问题的求解提供了有用的信息 在求解任一子问题时
  • 二叉树先中后序遍历-12.4(day12)

    二叉树三种基本遍历方式 先序遍历 从根节点开始 逐级向下遍历 中序遍历 从左子树最后一层的最左侧节点开始遍历 当遍历到根节点后在开始遍历右子树 后续遍历 先访问叶子节点 从左子树到右子树 最后到根节点 记忆方法 先 中 后可以理解为前 中
  • DS八大排序之冒泡排序和快速排序

    前言 前两期我们已经对 插入排序 直接插入排序和希尔排序 和 选择排序 直接选择排序和堆排序 进行了详细的介绍 这一期我们再来详细介绍一组排序 交换排序 即耳熟能详的冒泡排序和赫赫有名的快速排序 本期内容介绍 冒泡排序 快速排序 Hoare
  • 剑指 Offer(第2版)面试题 35:复杂链表的复制

    剑指 Offer 第2版 面试题 35 复杂链表的复制 剑指 Offer 第2版 面试题 35 复杂链表的复制 解法1 模拟 剑指 Offer 第2版 面试题 35 复杂链表的复制 题目来源 48 复杂链表的复刻 解法1 模拟 算法 复制原
  • 数据结构 数组与字符串

    介绍 数组的基础 定义和声明 基本定义 在C语言中 数组可以被定义为一系列相同类型的元素的集合 每个元素在内存中连续排列 可以通过索引 通常是从0开始的整数 来访问 数组的声明 数组在C语言中的声明包括元素类型 数组名和大小 例如 声明一个
  • 【华为OD】给定一个整数数组nums,请你在该数组中找出两个数,使得这两个数 的和的绝对值abs(nums[x] + nums[y])为最小值并按从小到大返回这 两个数以及它们和的绝对值

    题目描述 给定一个整数数组nums 请你在该数组中找出两个数 使得这两个数 的和的绝对值abs nums x nums y 为最小值并按从小到大返回这 两个数以及它们和的绝对值 每种输入只会对应一个答案 数组中同一 个元素不能使用两遍 输入
  • 代码随想录算法训练营第42天| ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

    416 分割等和子集 已解答 中等 相关标签 相关企业 给你一个 只包含正整数 的 非空 数组 nums 请你判断是否可以将这个数组分割成两个子集 使得两个子集的元素和相等 示例 1 输入 nums 1 5 11 5 输出 true 解释
  • LeetCode21. Merge Two Sorted Lists

    文章目录 一 题目 二 题解 一 题目 You are given the heads of two sorted linked lists list1 and list2 Merge the two lists into one sort
  • LeetCode 1901. 寻找峰值 II

    一 题目 1 题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子 上 下 左 右 的元素 给你一个 从 0 开始编号 的 m x n 矩阵 mat 其中任意两个相邻格子的值都 不相同 找出 任意一个 峰值 mat i j
  • 数据结构学习笔记(七)搜索结构

    文章目录 1 前言 2 概念 3 静态搜索结构 3 1 静态搜索表 3 2 顺序搜索表 3 2 1 基于有序顺序表和顺序搜索和折半搜索 4 二叉搜索树
  • Leetcode 45 跳跃游戏 II

    题意理解 给定一个长度为 n 的 0 索引 整数数组 nums 初始位置为 nums 0 每个元素 nums i 表示从索引 i 向前跳转的最大长度 还是从初始坐标i 0的位置到达最后一个元素 但是问题不是能不能跳到 而是 最少几步能跳到最
  • 【每日一题】2397. 被列覆盖的最多行数-2024.1.4

    题目 2397 被列覆盖的最多行数 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆
  • 数据结构——排序

    前言 哈喽小伙伴们好久不见 也是顺利的考完试迎来了寒假 众所周知 不怕同学是学霸 就怕学霸放寒假 假期身为弯道超车的最佳时间 我们定然是不能懒散的度过 今天我们就一起来学习数据结构初阶的终章 七大排序 本文所有的排序演示都为升序排序 目录
  • 单向不带头链表的使用

    单向不带头链表的使用 链表的创建 typedef struct LNode SLDataType data struct LNode next LNode LinkList 按位查找 LNode GetElem LinkList L int
  • 顺序表和链表基础

    定义动态的顺序表 typedef int SLDataType typedef struct Seqlist SLDataType array size t size size t capacity Seqlist 在顺序表中插入数据 bo
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路

随机推荐

  • pandas计算最大回撤

    文章目录 需求 实现 总结 参考文章 需求 需要计算某股票在某个周期内的最大回撤率 最大回撤定义 在选定周期内任一历史时点往后推 产品净值走到最低点时的收益率回撤幅度的最大值 实现 思路就是将dataframe在groupby之后 通过ap
  • windows server 2008 intel 82579V 82580 驱动安装 错误解决方法

    https communities intel com thread 20667 start 15 tstart 0 This is actually a dirty trick by Intel someone has decided t
  • Python一个命令开启http下载服务器

    下载并安装Python 例如这里想把命令E easytest作为提供下载的目录 那么在cmd里cd到该目录下 并执行命令 python exe m SimpleHTTPServer 如果提示错误 No module named Simple
  • CPU基础知识之Cache介绍

    一 什么是Cache Cache就是CPU缓存 它是位于CPU和内存之间的临时存储器 CPU在读取数据进行计算的时候 首先是从内部的缓存中查找需要的数据 如果有 可以最短时间最快速度交付CPU 但是如果没有找到 CPU就会提出 要求 经过缓
  • 一款桌面整理软件——Fences

    一款桌面整理软件 Fences 一款桌面整理软件 Fences 接下来是安装步骤 下载安装包 一款桌面整理软件 Fences 给大家推荐一款桌面整理软件 fences 一般来说这款软件是收费的 但是 作为穷鬼的我暂时还是决定用一款破解版 f
  • 使用 Linux 相关知识部署博客系统

    目录 编辑一 认识 Linux 二 如何拥有 Linux 环境 三 常见的 Linux 命令 1 目录相关命令 1 ls 2 pwd 3 cd 2 文件操作相关命令 1 touch 2 cat 3 echo 3 vim vim 的关键概念
  • 机械臂视觉抓取总结

    基于视觉的机械臂抓取的三个关键任务 目标定位 目标姿态估计和抓取估计 目标定位 无分类的目标定位 目标检测和目标实例分割 此任务在输入数据中提供目标对象的区域 目标姿态估计 对6D目标姿态进行估计 包括基于对应的方法 基于模板的方法和基于投
  • 阿里云服务器ECS带宽计费模式租用价格表

    阿里云服务器ECS公网带宽地域不同价格不同 以北京地域为例1M带宽一个月价格是23元 M 月 按流量计费价格是1GB流量0 8元 带宽值达到6M后 超过5M的部分带宽单价上涨到80元 M 月 中国香港地域带宽1M带宽30元一个月 按流量计费
  • 加州房价预测项目详细笔记(Regression)——(2)采样(数据分割)<重要>

    参考内容 机器学习实战 原作者github https github com ageron handson ml 加州房价预测项目精细解释https blog csdn net jiaoyangwm article details 8167
  • html改变按钮水平位置,div中button水平居中

    CSS如何让一个按钮居中应该怎么做 通过这样的Css样式就可以实现 使用margin left auto margin right auto 可以让你的div居中对齐 style margin left auto margin right
  • Spring Boot中使用thymeleaf以及各种取值,判断,选择,截取等方式

    Spring Boot中使用thymeleaf Spring Boot支持FreeMarker Groovy Thymeleaf和Mustache四种模板解析引擎 官方推荐使用Thymeleaf spring boot starter th
  • 100决杀

    1 所有的困苦都是有用意的 这是老天爷在磨练你 为了把重任交给你 2 毛遂自荐 好处多多 让别人看到你 知道你的存在 知道你的能力 3 千万别入错行 人情有牵绊 恩怨的纠葛 转行可不是那幺容易的呀 4 别轻易转行 转行的风险很林 若无大决心
  • MATLAB代码:微电网两阶段鲁棒优化经济调度程序 关键词:微网优化调度 两阶段鲁棒 CCG算法 经济调度

    MATLAB代码 微电网两阶段鲁棒优化经济调度程序 关键词 微网优化调度 两阶段鲁棒 CCG算法 经济调度 仿真平台 MATLAB YALMIP CPLEX 主要内容 构建了微网两阶段鲁棒调度模型 建立了min max min 结构的两阶段
  • STM32学习笔记:串口一键下载电路(CH340)的理解

    如图 为原子的串口下载电路 在CH340的数据手册上有引脚的介绍以及作用 这两个引脚 DTR 和RTS 都是 输出类型 MCUISP 一键下载工具 会控制CH340这两个引脚的高低电平状态 通过控制DTR 和RST 这两个引脚的高低电平状态
  • 897. 最长公共子序列 线性dp

    给定两个长度分别为 N 和 M 的字符串 A 和 B 求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少 输入格式 第一行包含两个整数 N 和 M 第二行包含一个长度为 N 的字符串 表示字符串 A 第三行包含一个长度为 M 的字
  • 计算机键盘换挡键,电脑键盘上的换挡键是哪个

    Esc 退出键 英文Escape 的缩写 中文意思是逃脱 出口等 在电脑的应用中主要的作用是退出某个程序 例如 我们在玩游戏的时候想退出来 就按一下这个键 Tab 表格键 可能大家比较少用这一个键 它是Table的缩写 中文意思是表格 在电
  • windows nignx 常用操作命令(启动、停止、重启服务)

    文章目录 1 查看nginx 版本号 2 根据名称查询 window 下的nginx 的启动进程 3 再根据端口号查询进程 4 启动nginx 命令 5 停止nginx 6 快速停止或关闭Nginx 7 正常停止或关闭Nginx 8 配置文
  • Open3D Ransac拟合分割多个球体

    目录 一 算法原理 二 代码实现 三 结果展示 四 测试数据 一 算法原理 算法的核心原理还是RANSAC拟合球面 具体理论可参考 Open3D RANSAC三维点云球面拟合 只是对代码稍加修改使其适用于分割点云数据中的多个球体 二 代码实
  • 回归平方和 ESS,残差平方和 RSS,总体平方和 TSS

    https zhidao baidu com question 565190261749684764 html 回归平方和 ESS 残差平方和 RSS 总体平方和 TSS 总变差 TSS 被解释变量Y的观测值与其平均值的离差平方和 总平方和
  • 5.12 数据结构——哈夫曼编码

    在远程通讯中 要将待传字符转换成二进制的字符串 假设要传输的字符为 ABACCDA 若编码为 A 00 B 01 C 10 D 11 那么要传输的字符的编码为 00010010101100 若将编码设计为长度不等的二进制编码 即让待传字符串