ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:70.98KB ,
资源ID:7172102      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7172102.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(题目编写一个哈夫曼译码器模拟程序.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

题目编写一个哈夫曼译码器模拟程序.docx

1、题目编写一个哈夫曼译码器模拟程序题目:编写一个哈夫曼/译码器模拟程序班级:031016 姓名:王君学号:03101612 完成日期:2005-10-10需求分析1. 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本,本程序要求将一些代码用哈夫曼编码进行编码。矚慫润厲钐瘗睞枥庑赖賃軔。 2. 首先要对输入的字符和响应的统计使用频率进行编码,将编好的代码放入响应的文件当中,当绎码时,读出要译的原码利用已编好的哈夫曼进行绎码。聞創沟燴鐺險爱氇谴净祸測。3. 测试数据(1)利用教科书例6-2的数据调试程序。 (2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以

2、下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”残骛楼諍锩瀨濟溆塹籟婭骒。字符 A B C D E F G H I J K L M频度183 64 13 22 32 103 21 15 47 57 1 5 32 20字符N O P Q R S T U V W X Y Z频度57 63 15 1 48 51 80 23 8 18 1 16 1二概要设计 1.堆栈的抽象数据类型定义为:ADT BinaryTree 数据对象D:D是具有特性的数据元素的集合。 数据关系R: 若D=,则R也是空,称BinaryTree为空二叉树; 若D不等空,则R=H,H是如下二元关系;在

3、D中存在唯一的称为根的数据元素root,它在关系H 下无前驱;若D-root不等于空,则存在D-root=D1,D2,且D!D2=空;若 D1不为空,则D1 中存在唯一的元素x1,H,且存在Dr上的关系 HrH;H=,H1,Hr;酽锕极額閉镇桧猪訣锥顧荭。(D1,H1) 是一棵符合定义的二叉树,称为根的左子树,Dr,Hr是一棵符合本定义的二叉树,称为根的右子树。彈贸摄尔霁毙攬砖卤庑诒尔。数据操作: InitBiTree(&T); 操作结果:构造空的二叉树。 DestroyBiTree(&T) 初始条件:二叉树T 存在。 操作结果:销毁二叉树T. CreatebiTree(&T,definiti

4、on); 初始条件:definition给出二叉树T的定义。 操作结果:按definition构造二叉树T。 ClearBiTree(&T) 初始条件:二叉树T存在。 操作结果:将二叉树T清为空树。 BiTreeEmpty(T); 初始条件:二叉树T存在。 操作结果:返回T 深度。 Root(T); 初始条件:二叉树T存在。 操作荚果:返回T的根。 Value(T,e); 初始条件:二叉树T存在,e是t中某个结点。 操作结果:返回e的值。 Assign(T,&e,value) 初始条件:二叉树T存在,e是t中某个结点。 操作结果:结点e赋值为valuel。ADT BinaryTree本程序包含

5、三个模块:主程序模块; void main() 初始二叉树; do接受命令;处理命令; while(“命令”=”推出”) 编码模块。译码模块。主程序模块编码模块译码模块详细设计#include#include#include#include#include #includeusing namespace std;int s1=0,s2=0;/s1s2/typedef struct int weight; int parent,lchild,rchild;HTNode,*HuffmanTree;typedef char *HuffmanCode;/void creat(int *w,char *

6、c) char ch; int n,i; ifstream fin(hfmTree.txt); for(i=1;in; wi=n;ci=ch; coutendl; for(i=1;i=27;i+) cout:ci :setw(4)wi ;謀荞抟箧飆鐸怼类蒋薔點鉍。 if(i%4=0) coutendl; coutendl; cout,endl;/-select-/厦礴恳蹒骈時盡继價骚卺癩。void Select(HTNode *HT,int n) int i; HTNode *p; p=HT; for(i=1;iparent=0) s1=i; break; for(i=1;iparent=0)

7、 s2=i; break; for(i=1;iweightweight & (p+i-1)-parent=0)茕桢广鳓鯡选块网羈泪镀齐。 if(i=s2) s2=s1; s1=i; else s1=i; for(i=1;iweightweight & (p+i-1)-parent=0)鹅娅尽損鹌惨歷茏鴛賴縈诘。 s2=i;/-/籟丛妈羥为贍偾蛏练淨槠挞。/-/預頌圣鉉儐歲龈讶骅籴買闥。void Encoding(HuffmanCode HC,char *d,int n) char ch; int i; ifstream fin(ToBeTran.txt); /渗釤呛俨匀谔鱉调硯錦鋇絨。 ofs

8、tream fout(CodePrin.txt); /铙誅卧泻噦圣骋贶頂廡缝勵。 ch=fin.get(); / while(ch!=EOF) for(i=1;i=n;i+) if(di=ch) break; foutHCi; ch=fin.get(); fin.close(); fout.close();/-/擁締凤袜备訊顎轮烂蔷報赢。void Decoding(HuffmanCode HC,char *w,int k) ifstream fin(CodePrin.txt); /贓熱俣阃歲匱阊邺镓騷鯛汉。 ofstream fout(TextFile.txt); /坛摶乡囂忏蒌鍥铃氈淚跻馱。

9、 char str20; char c200,ch; int i=0,j=1,n,m,t; ch=fin.get(); while(ch!=EOF) / c+i=ch; ch=fin.get(); while(ji) / for(n=1;n=k;n+) t=strlen(HCn); for(m=1;m=t;m+) strm-1=cm+j-1; strm-1=0; if(strcmp(str,HCn)=0) foutwn; break; j+=strlen(HCn); fin.close(); / fout.close();/Decoding/-/蜡變黲癟報伥铉锚鈰赘籜葦。/-/買鲷鴯譖昙膚遙闫

10、撷凄届嬌。void print() ifstream fin(CodePrin.txt); / ifstream fi(ToBeTran.txt); char ch; int i=0; coutendl; ch=fi.get(); while(ch!=EOF) coutch; ch=fi.get(); coutendlendlendl; coutendl; ch=fin.get(); while(ch!=EOF) coutch; +i; if(i%50=0) coutendl; ch=fin.get(); fin.close(); coutendlendl;/-/ 綾镝鯛駕櫬鹕踪韦辚糴飙钪。/

11、*/驅踬髏彦浃绥譎饴憂锦諑琼。/*/猫虿驢绘燈鮒诛髅貺庑献鵬。void HuffmanCoding(HTNode *HT, HuffmanCode &HC, int *w,int n,char *d)锹籁饗迳琐筆襖鸥娅薔嗚訝。 ifstream fin(ToBeTran.txt); int m,i,start,f; int c; float sum=0; char *cd; HTNode *p; if(n=1)return; /n1 m=2*n-1; /m HT=(HTNode *)malloc(m+1)*sizeof(HTNode); for(p=HT,i=1;iweight=wi; (p+

12、i-1)-parent=0; (p+i-1)-lchild=0; (p+i-1)-rchild=0; for(;iweight=0; (p+i-1)-parent=0; (p+i-1)-lchild=0; (p+i-1)-rchild=0; / for(i=n+1;iparent=i;(p+s2-1)-parent=i; (p+i-1)-lchild=s1;(p+i-1)-rchild=s2; (p+i-1)-weight=(p+s1-1)-weight+(p+s2-1)-weight; / HC=(HuffmanCode)malloc(n+1)*sizeof(char *); cd=(cha

13、r *)malloc(n*sizeof(char); cdn-1=0; for(i=1;iparent;f!=0;c=f,f=(p+f-1)-parent)輒峄陽檉簖疖網儂號泶蛴镧。 if(p+f-1)-lchild=c) cd-start=0; else cd-start=1; HCi=(char*)malloc(n-start)*sizeof(char); strcpy(HCi,&cdstart); / coutsetw(4)di; coutsetw(13)HCi;sum+=strlen(HCi); cout ; if(i%2=0) coutendl; / fin.close(); cou

14、tendl; free(cd); /cd /*/ 尧侧閆繭絳闕绚勵蜆贅瀝纰。/-/识饒鎂錕缢灩筧嚌俨淒侬减。void main() int w28; char c28; char ch; HTNode *HT=0; / HuffmanCode HC=0; /coutnum; / for(i=1;i=num;i+) cout iwi; coutendl;*/ cout*/*endl;凍鈹鋨劳臘锴痫婦胫籴铍賄。 cout-endl;恥諤銪灭萦欢煬鞏鹜錦聰櫻。 coutI:. E:. D:. P:. endl;鯊腎鑰诎褳鉀沩懼統庫摇饬。 cout-endl;硕癘鄴颃诌攆檸攜驤蔹鸶胶。 coutQen

15、dl; cout; ch=cin.get(); while(ch!=Q) switch(ch) case I:creat(w,c);cout;break; case E:coutendlendl;HuffmanCoding(HT,HC ,w,27,c);Encoding(HC,c,27);cout;break;阌擻輳嬪諫迁择楨秘騖輛埙。 case D:Decoding(HC,c,27);coutendlendl!endlendl;cout;break;氬嚕躑竄贸恳彈瀘颔澩纷釓。 case P:print();cout;break; default :break; / ch=cin.get();

16、 coutendl; coutendl*!*endl;釷鹆資贏車贖孙滅獅赘慶獷。/函数的调用关系图反映了演示程序的层次结构:main()HuffmanCoding();Encoding();Decoding(HC,c,27);print();调试分析本程序最主要的是如何创建哈夫曼树进行编码和译码,在创建哈夫曼树时对数据进行了分析,首先根据字符的频度进行创建哈夫曼树,将编好的编码放入到固定的文件当中,再读取需要编译的字符串进行编码放入到文件当中,然后对编码进行译码,译码主要是根据已经创建好的哈夫曼对其译码。怂阐譜鯪迳導嘯畫長凉馴鸨。在数据处理时遇到一些程序调试上的困难,最大的困难在译码的函数中如

17、何对一串字符进行逐个的译码,经过仔细的分析数据,终于找到了合适的算法对它进行译码。谚辞調担鈧谄动禪泻類谨觋。调试中出现很多小的错误,比如函数调用的数据比匹配,定义错误,还有输出格式的控制等,这些错误后来都经过仔细的调试编译都调试通过了。数据输出基本上都正确。嘰觐詿缧铴嗫偽純铪锩癱恳。在本程序中,输入输出相对来说比较简单,在创建哈夫曼树上花费了不少时间,但相对来说还是难度教小,最主要的是理解哈夫曼树的本质原理。熒绐譏钲鏌觶鷹緇機库圆鍰。本程序的时间和空间复杂度分析:数据的读入首先放到两个数组当中,然后最每个数据进行判断,由于哈夫曼编码效率很高,所以时间复杂度上相对较好。在空间上,数据存放在两个数

18、组当中需先申请相应的空间,会有空间浪费,但相对来说是比较少的。鶼渍螻偉阅劍鲰腎邏蘞阕簣。本实习作业采用数据抽象的程序设计方法,将程序分为三个层次结构:编码结构,译码模块,主程序模块,使得设计时思路清晰,实现时调试顺利,各模块具有较好的可重用性,确实得到了一次良好的程序设计训练。纣忧蔣氳頑莶驅藥悯骛覲僨。用户手册本程序的运行环境为DOS操作系统,执行文件为:哈夫曼_ 译码器.exe。进入演示程序后显示的文本方式的用户截面:测试结果输入数据:字符 A B C D E F G H I J K L M频度183 64 13 22 32 103 21 15 47 57 1 5 32 20字符N O P Q R S T U V W X Y Z频度57 63 15 1 48 51 80 23 8 18 1 16 1输出如下:结果正确符合要求!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1