- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
霍夫曼对英文文档编码解码
霍夫曼树编码
一、问题描述
对带压缩文本进行扫描,统计文中各符号出现的次数,利用二叉堆构造霍夫曼编码树,并将霍夫曼编码进行压缩、发送、解压。
二、基本要求
1.压缩过程
(1)扫描待压缩文本并统计文中各符号出现的频率/次数(使用一大小为256的整形数组)。
(2)找出有效符号的个数,比如n。动态创建一大小为2n-1的结构数组,用于构建霍夫曼编码树。
(3) 霍夫曼编码树的创建需要在数组中不断地找出频率属性最小者和次小者。使用二叉堆来实现。
(4)遍历霍夫曼编码树,计算出各符号的码字。
(5) 再次扫描文本,使用霍夫曼编码生成新的压缩文件。文件内容构成:压缩内容字节数+最后一字节有效位数+符号频率数组(256)+压缩内容。
2.解压缩过程
(1)打开已压缩文件,读出符号频率数组内容,构建解码用霍夫曼编码树。
(2)从文件中顺序读出二进制码位,利用编码树进行解码。一个符号的解码过程也是一次从根节点到叶节点的遍历过程。
三、测试数据
扫描word.txt文本,内容如下:
i am so clever!guad asdfgiugfyiuwqb asffgyicb
iafgiyqyrfg acbiyqwgf cbqu,cbwuqifgrq.cwuqvgqgbcaeecbyiaydgcyaib auifgyiuagf
算法思想
本次实习是在Huffman编码及其解码基础上,对编码内容进行压缩,接收端进行解压解码。所以Huffman建树、void Compress(int codewords[],int code_len,int weight[],int t)压缩函数以及void Decompress(int w[],int wt[])解压函数是实现问题要求的主要函数。
1.huffman算法
以权值分别W1,W2,...Wn的n个结点,构成n棵二叉树F={T1,T2...Tn},其中每棵二叉树只有一个权值为Wi的根结点。
在F中选取两棵根结点权值最小的树作为左右子树构造一棵新二叉树,且新二叉树根结点权值为左右子树权值之和。
从F中删除这两棵二叉树,并将新的二叉树加入到F中。
重复步骤(2)(3),直到F中仅剩一棵二叉树为止。
图1 霍夫曼建树过程
2.压缩函数
对存放文本编码的数组进行扫描,每扫描八位将其转化为十进制数进行存储,存放到一个数组中,并且保存最后一位存储的数据的二进制转化位数。
3.解压函数
将压缩的内容一位一位读出,并将其转化为二进制,依次存入数组中,最后一位数据根据转化的位数还原出原来的二进制数,存入数组。
模块划分
头文件Huffman.h.头文件
(1) void CreatHeap(HaffNode a[], int n, int h)函数:其功能是调整非叶节点a[h]使之满足最大堆,n为数组a的元素个数。
(2) void InitCreatHeap(HaffNode a[], int n)函数:其功能是初始化最大堆。
(3) void HeapSort(HaffNode a[], int n) 函数:其功能是对数组HaffNode a[]进行堆排序。
(4) void Haffman(char letters[],int weight[], HaffNode haffTree[])函数:其功能是根据各符号及其权值构建霍夫曼树。
(5) void HaffmanCode(HaffNode haffTree[], int n, Code haffCode[])函数:其功能是根据构建的霍夫曼树进行霍夫曼编码,将编码存在Code haffCode[]数组中。
(6) int encode(int codewords[],char words[],char letters[],Code haffCode[])函数:其功能是将文本内容进行编码,并将码字存在codewords[]数组中。
(7) void decode(HaffNode haffTree[],char letters[],int codewords[],int code_len)函数:其功能是对接收到的霍夫曼编码进行解码。
(8) void Compress(int codewords[],int code_len,int weight[],int t)函数:其功能是将存放码字的数组进行压缩并存入文件中。
(9) void Decompress(int w[],int wt[])函数:其功能是将文件中压缩的存储编码码字的数组进行解压。
2.main.c文件
main.c文件中包含节点结构体定义及主函数void main()。
void main()函数:其功能是根据测试内容,调用功能函数实现问题要求。
整体程序框图
您可能关注的文档
最近下载
- 高标准农田项目冬季施工方案.doc VIP
- 2025届北京市西城区高三语文一模议论文写作标杆文:“用功与有功”.docx VIP
- 李景宁有机化学课后答案.doc VIP
- 3.1《消失的恐龙》 教学设计 苏教版科学六年级上册.docx
- -撕下消极标签积极悦纳自我(正确认识自身缺点转化为优势)-主题班会课件.pptx VIP
- 数据库销售合同8篇.docx VIP
- 2025年初级经济师之初级经济师人力资源管理考试题库及完整答案(历年真题).docx VIP
- 【MOOC】中西方神话的文化解读与比较-中国矿业大学 中国大学慕课MOOC答案.docx VIP
- 3.1伟大的改革开放课件(共26张ppt,内嵌1个视频)高中政治统编版必修一中国特色社会主义(含音频+视频).pptx VIP
- (2025年)水处理工试题及答案(一).docx VIP
原创力文档


文档评论(0)