数据压缩实验三:用c语言实现Huffman编码和压缩效

发布者:admin 发布时间:2019-10-26 20:20 浏览次数:

  Huffman编码是一种无失真的编码方式,是可变字长编码(VLC)的一种。

  出现概率大的信源符号编长码,出现概率小的信源符号编短码,从而使平均码长最小。

  在程序实现时常使用一种叫树的数据结构实现Huffman编码,由它编出的码是即时码。

  (3)每一次选频率最小的两个值,作为二叉树的两个叶子节点,将和作为它们的父节点,这两个叶子节点不再参与比较,新的父节点参与比较;

  (5)将形成的二叉树的左节点标0,右节点标1,把从最上面的根节点到最下面的叶子节点图中遇到的0、1序列串起来,得到各个字符的编码表示;

  Ps:上述三个结构体的创建均在下图(Huffman编码工程目录)的huffman.c文件中实现。

  1.创建一个256个元素的指针数组,用来保存256个信源符号的频率,其下标对应相应字符的ASCII码值。

  实验结果分析:程序运行完成之后生成一个huff文件(作为编码后的输出文件,包含码表和编码后的数据)和统计数据文件,对一个ppt文件编码后生成的统计数据txt文件如图:

  分析上表和上图:可知Huffman编码对于不同格式的文件,其压缩效率不同。具体来说,当概率较集中在某几个符号时,用Huffman编码可以得到较大压缩比(如上面的ppt、pdf、html文件),而当符号分布较均匀时,则得到较小压缩比甚至压缩比1(如png和docx,这两个文件概率分布较均匀,码表所占的内存大导致压缩比甚至小于1,其他接近于1的文件也主要是因为符号分布较均匀而不能用较少的码字来编码导致压缩效率不高)

  1、Huffman编码算法是一种无失真编码,虽然在编码原理较为容易,但在工程应用上应用不多,因为该编码方法适用于信源符号单一且集中分布的文件,而实际工程应用上的文件却是十分复杂的。这会导致其传输的码表占据很大内存,从而降低压缩效率。

  2、该程序实现的过程用到了二叉树这种数据结构。展开来讲,对于一种数据结构的分析,应该从其逻辑结构和存储结构两方面分析。逻辑结构即其内部元素之间的相关性;存储结构即其元素存储位置的相关性。

  (1)原理概述huffamn编码过程实际上是找到一棵最优二叉树的过程;在编码过程中首先要知道各个符号的统计概率,然后找两个最小的合并后的概率再和此前最小的合并,直到到根节点。生成树后就是编码的过程,一...博文来自:weixin_41966757的博客

  一:实验原理1.DCPM编码原理DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。DCPM编码是对模拟信号幅度抽样的差值进行量化编码的调制方式,这种方式是用已经过去的抽样值来预测当前的抽样值...博文来自:yee_0217的博客

  一、实验原理1、Huffman编码Huffman Coding(哈夫曼编码)是一种无失真的编码方式,是可变字长编码(VLC)的一种。Huffman编码基于信源的概率统计模型,它的基本思路是:出现概率大...博文来自:zgyggy的博客

  一、实验原理      DPCM是差分预测编码调制的缩写,它利用过去的抽样值来预测当前的抽样值,对它们的差值进行编码。差值编码可以提高编码频率,这种技术已应用于模拟信号的数字通信之中。图像内的像素值之...博文来自:刘东的博客

  实验目的了解文件的概念掌握线性链表的插入、删除等算法掌握Huffman树的概念及构造方法掌握二叉树的存储结构及遍历算法利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理......博文来自:的博客

  今天遇到一个问题,简要来说就是输入一串字符串,对其进行无损压缩,尽量做到压缩原始数据量。最先考虑到的方法是Huffman编码,将其实现过程简要描述。第一步,输入一串字符串。clearall;clc;%...博文来自:wowo的专栏

  一、实验原理1. Huffman编码算法(1)将文件以ASCII字符流的形式读入,统计每个符号的发生频率;(2)将所有文件中出现过的字符按照频率从小到大的顺序排列;(3)每一次选出最小的两个值,作为二...博文来自:cherry_holmes的博客

  实验目的掌握Huffman编解码实现的数据结构和实现框架,进一步熟练使用C编程语言,并完成压缩效率的分析。实验原理1.本实验中Huffman编码算法(1)将文件以ASCII字符流的形式读入,统计每个符...博文来自:MayNine的博客

  一、实验原理 哈夫曼编码(HuffmanCoding),又称霍夫曼编码或最佳码,是可变字长编码(VLC)的一种,属于无损压缩。该方法完全依据字符出现概率来构造码字,出现概率大的符号码长短,概率小的码长...博文来自:ininw的博客

  芯片只能发送100byte以内的数据,但是我的数据大于这个指标,但是我想压缩下,一次性传完,但是不知道有什么压缩和解压缩算法,求解!(接收到的数据是二进制啊,全是0101论坛

  什么是Huffman树?设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与对应叶子结点权值的乘积之和叫做二叉树的“带权”路径长度。什么是最优二叉树?对于一组带有确定权植的叶子结点,带...博文来自:我爱下午茶

  一简单字符串压缩编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1、仅压缩连续重复出现的字符。比如字符串”abcbc”由于无连续重复字符,压缩后的字符串还...博文来自:bcbobo21cn的专栏

  用C语言简单演示如何借助zlib库实现文件的压缩和解压缩最近需要用到zlib压缩,解压,写了一个简单的测试demo,记录如下:#include#include#include//Demonstrati...博文来自:谢健的专栏

  Huffman编码的8种实现方式简介这里给出的源代码huffman.zip用8种不同的方式实现了Huffman编码算法。这些代码意在演示不同Huffman算法的实现原理,比较算法执行效率的差别,但并没...博文来自:Kevins的天空

  在一些嵌入式的项目设计中,空间是相当宝贵的,因为一个CPU的存储是有限的,所以此时我们在保存数据的时候,喜欢来进行压缩保存,著名的有哈夫曼树算法,专门用来做压缩的算法,当然,本节我们不讨论这些稍微高级...博文来自:weixin_33785972的博客

  字符压缩编码是常常用到的编码技术,压缩的目的在于将出现频率较高的字符用短编码表示,而对于很少出现的字符用较长编码表示,从而提升字符在某些领域中的负荷,如网络传输过程中减少流量开销,常用的字符串压缩编码...博文来自:跋跋寒的博客

  功能要求: 1、读取文件 2、显示哈夫曼编码 3、压缩源文件 4、解压缩 5、显示压缩前后两个文件的大小和解压缩后的文件 6、退出论坛

  Huffman树的概念Huffman树是由n个带权叶子节点构成的所有二叉树中带权路径长度最短的二叉树。节点的带权路径长度树根到某一节点的路径长度与该节点的权的乘积。树的带权路径长度树的带权路径长度为树...博文来自:苍老的小孩的博客

  写一个对文件进行压缩和解压缩的程序,功能如下:①可以对纯英文文档实现压缩和解压;②较好的界面程序运行的说明。  介绍哈夫曼: 效率最高的判别树即为哈夫曼树在计算机数据处理中,霍夫曼编码使用变长编码表对...博文来自:hebtu666

  基于哈夫曼编码实现文件压缩是在学习数据结构(严蔚敏版)书中哈夫曼树及其应用后对书中伪代码的实现和完善,采用哈夫曼静态编码的方式,通过对数据进行两遍扫描,第一次统计出现的字符频次,进而构造哈夫曼树,第二...博文来自:weixin_34310369的博客

  我用huffman编码后,文件输出的xx.txt的大小反而比原文件的要大,究其原因是应为用了字符输出; 但我不会比特串输出。曾经找了c语言中流式文件操作,然后用二进制模式打开,用了fwrite()函数论坛

  如题问题描述:现有一个文本文件,其中包含的字符数据出现的次数各不相同,先要求对该文本中包含的字符进行编码,使文本占用的位数更小。问题分析:我们知道文件的存储都是以二进制数表示的,如:字符c可以表示为0...博文来自:W_ILU的博客

  基于哈夫曼树的数据压缩算法发布时间:2017年10月30日19:30  时间限制:1000ms  内存限制:128M描述输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码...博文来自:aaaliaosha的博客

  描述输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。输入多组数据,...博文来自:马甲都掉光了

  每一个程序员都有一个梦想,梦想着能够进入阿里、腾讯、字节跳动、百度等一线互联网公司,由于身边的环境等原因,不知道 BAT 等一线互联网公司使用哪些技术?或者该如何去学习这些技术?或者我该去哪些获取这些...博文

  目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、应届生招聘 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站 9、项目开源 10、在线工具宝典大全...博文

  在公司项目的开发过程中,需要编写shell脚本去处理一个业务,在编写过程中发现自身对shell脚本的知识不够完善,顾整理一下,本文章主要内容来自菜鸟教程 , 也添加了一些知识点 shell脚本? 在...博文

  欢迎添加华为云小助手微信(微信号:HWCloud002或HWCloud003),验证通过后,输入关键字“加群”,加入华为云线上技术讨论群;输入关键字“最新活动”,获取华为云最新特惠促销。华为云诸多技术...博文

  起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道...博文

  写在前边 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当我去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很多边界条件想不...博文

  今天给大家带来点快乐,程序员才能看懂。 来源:公司实习生找 Bug 2.在调试时,将断点设...博文

  关于基础 项目打算招聘一个自动化运维,主要需求是python、Linux与shell脚本能力。但面试几天发现一些问题: 简历虚假 这个不管哪行,简历含水量大都是普遍存在的,看简历犀利的一比,一面...博文

  1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传...博文

  我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案...

  Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 4 点。...

  文章目录前言下载免费高清大图下载带水印的精选图代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小图的...

  作者:阿波、纯洁的微笑漫画:宁州枪手程序员如今已经发展成社会的主流职业,以至于街头的王大妈李大爷都能说出一二来,据说他们认为的程序员是这样子的:程序员都是秃头,秃的越狠越......

  作者 小鹿 来源 公众号:小鹿动画学编程 写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。 对于这部分掌握...

  500行代码,教你用python写个微信飞机大战10-16阅读数 2万+

  三年一跳槽、拒绝“唯学历”,火速 Get 这份程序员求生指南!10-17阅读数 1万+

  数据压缩实验五:JPEG文件解码实...weixin_37771560:您好,如果可以能不能发到我的邮箱呢? 谢了


上一篇:怎么理解遍历的马尔可夫信源有平稳分布    下一篇:北邮信息论基础-第三章ppt