哈夫曼编解码算法(C实现)

2023-11-18

记得在毕业前去找工作,应聘康佳集团移动应用工程师的笔试题出了这么一道题。

传输文本字符”BADCADFEED”,只能出现”ABCDEF”这六个字符,使用以下的编码方式:

如传输字符:BADCADFEED          接收编码:001000011010000011101100100011

 

接收方可以根据每3个bit进行一次字符解码的方式还原文本传输的信息,但是这样的传输效率太低了,需要30bit才发送10个字符。如何编码来提高传输以及接收效率???请写出你的编码方式以及算法思想。

我当时并没有想到解决方法,GG了。最近运用到霍夫曼树,现在回想起来不就是这个算法吗,哈哈哈,太好了。在这里总结一下。

 

引入:

要提高效率,必须要从编码方式去改变,这是无疑的。这里运用了避免每一个字符都占有相同的bit位。如



如传输字符:BADCADFEED          接收编码:1001010010101001000111100 

改进编码方式之后,可以看到发送相同的字符,需要25bit位就可以表示10个字符了。这种编码明显是有很大优势的。

 

问题:这个编码方式有什么规律呢?怎么得到呢?又是如何在接收方解码的呢?下面来揭开神奇的面纱。

假定经过统计得出ABCDEF在所需传输报文出现的概率如下:

 

霍夫曼树算法: 

给定实数w1,w2,···,wt且 w1<=w2<=···<=wt           

(1)连接w1,w2为权的两片树叶,得一分支点,其权为w1+w2 ;

(2)在w1+w2, w3+···+wt中选出两个最小的权,连接它们对应的顶点(不一定都是树叶),得分支点及所带的权;

(3)重复(2),直到形成t – 1个分支点,t片树叶为止

 

或者这样描述算法:

1、给定n个数值{ v1, v2, …, vn}

2.

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

哈夫曼编解码算法(C实现) 的相关文章

随机推荐

  • 编写程序,生成一个包含50个随机整数的列表,然后删除奇数

    可以这样编写程序 list for i in range 50 list append random randint 1 100 for num in list if num 2 0 list remove num print list
  • latex入门学习笔记总结

    目录 latex文件的组织方式 latex中的字符 latex中的强调 latex中的分页和断行 latex中文档元素 latex的环境 列表环境 代码环境 htbp 命令 latex中的表格 latex中的图片 插入一张图片 两图并排 插
  • linux指令timedatectl,centos7设置时间命令timedatectl

    在新的centos7里 关于时间的指令除了保留了之前版本中常用到的date hwclock等命令外 还增加了一个统一的命令timedatactl 下面结合其用法进行下小结 查看 timedatectl 指令用法帮助 root 361way
  • WPF自学篇--第一篇--Hello world

    主要知识点为 1 WPF如何修改启动页面 2 如何写Hello Word Sample 内容 1 由于专案是先加window wpf想加web wpf是调试找启动页面找了很久 终于发现在app config中Application下 Sta
  • python LeetCode 88 刷题记录

    题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你 合并 nums2 到 nums1 中 使合并后的数组同样按 非递减顺序 排列 注意
  • 修改Windows系统注册表并使其立即生效

    title 修改Windows系统注册表并使其立即生效 update 2019 12 22 15 38 06 description 修改Windows系统注册表并使其立即生效的方法 原文地址https tomsworkspace gith
  • 日常生活中常用的五星级句子

    1 After you 你先请 这是一句很常用的客套话 在进 出门 上车得场合你都可以表现一下 好象现在女士不愿意你这么做 特别是那些女权主义者 我还记得这么一段话 一个女士对一个让她先行的男士说 you do this because i
  • 基础版图书管理系统(Java实现)

    文章目录 前言 一 设计书类 书架类 二 设计用户类 1 管理员 2 普通用户 三 操作包 前言 对于图书管理系统我想大家都不会陌生 在C语言的学习中相信大家都写过这个系统 那么今天我们就用Java来实现一下图书管理系统 看看和C语言又有什
  • Linux下查看目录文件数和文件大小

    一 查看当前目录下文件个数 在linux下查看目录下有多少文件可以用 ls l 命令查看 ls lR 递归查看所有目录 如果文件很多 则用wc命令 和 grep 命令进行过滤 wc命令显示输出的行 列 字符数 l表示仅列出行 w表示仅列出多
  • Typescript:类的装饰器

    Typescript的装饰器我在学习typescript的时候并不是很清楚它的作用场景 直到使用了nest js框架后 才明白其作用 于是又深入学习了一下 希望通过对装饰器的学习提高对nest js的使用 装饰器 装饰器为我们在类的声明及成
  • 常用设计模式总结

    设计模式的相关知识 很多书籍和博客中都有详细总结 本文总结的目的 1 将自己学习到的设计模式的知识按照自己的逻辑重新总结 方便查看和记忆 2 方便让自己对设计模式中常用的知识有一个系统的认知 设计模式 话设计模式 书中提到 24 种设计模式
  • 使用 CUBLAS 库给矩阵运算提速

    前言 编写 CUDA 程序真心不是个简单的事儿 调试也不方便 很费时 那么有没有一些现成的 CUDA 库来调用呢 答案是有的 如 CUBLAS 就是 CUDA 专门用来解决线性代数运算的库 本文将大致介绍如何使用 CUBLAS 库 同时演示
  • 人体三维重建——参数化人体方法简述

    三维人体形状指的是以三维网格形式表示的人体几何形状模型 按照 1 中的分类方式 可以将三维人体形状重建粗略的分为参数化方法与非参数化方法 本次先介绍参数化方法 参数化人体形状重建方法依赖于某个基于统计得到的人体参数化模型 仅需一组低维向量
  • 学习SIP非常好的视频

    https www youtube com watch v gMcUpktyhOE
  • RNN循环神经网络

    RNN循环神经网络 前言 一 基本结构 RNN公式 在这里插入图片描述 https img blog csdnimg cn d2709e9180d1427d9f6349591ecbe204 png RNN特点 RNN种类 双向RNN网络 B
  • CodeIgniter(CI)4.1.9 安装学习整理ing

    最近一直在看各种php的框架 前面一个是安装的laravel 安装成功并实验了一个小例子 下面开始试着安装 CodeIgniter 我找了一个不是最新的版本 4 1 9版本 这个版本要求的还是比较高的 要求PHP 7 3 我习惯于用wind
  • 【华为OD机试真题2023B卷 JAVA&JS】代码编辑器

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 代码编辑器 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 某公司为了更高效的编写代码 邀请你开发一款代码编辑器程序 程序的输入为 已有的代码文本和指令序列 程序需输出
  • python waitress serve_Python httpserver.serve方法代碼示例

    本文整理匯總了Python中paste httpserver serve方法的典型用法代碼示例 如果您正苦於以下問題 Python httpserver serve方法的具體用法 Python httpserver serve怎麽用 Pyt
  • Linux 磁盘管理 : stat 命令详解

    stat命令用于显示文件的状态信息 stat命令的输出信息比ls命令的输出信息要更详细 语法 stat 选项 参数 选项 L 支持符号连接 f 显示文件系统状态而非文件状态 t 以简洁方式输出信息 help 显示指令的帮助信息 versio
  • 哈夫曼编解码算法(C实现)

    记得在毕业前去找工作 应聘康佳集团移动应用工程师的笔试题出了这么一道题 传输文本字符 BADCADFEED 只能出现 ABCDEF 这六个字符 使用以下的编码方式 如传输字符 BADCADFEED 接收编码 0010000110100000