哈夫曼编码译码系统_第1页
哈夫曼编码译码系统_第2页
哈夫曼编码译码系统_第3页
哈夫曼编码译码系统_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、自己用C+写的哈夫曼编码/译码系统,经过反复测试,绝对没问题,请放心使用。3、哈夫曼编码/译码系统(树应用)问题描述利用哈夫曼编码进行通信,可以压缩通信的数据量,提高传输效率,缩短信 息的传输时间,还有一定的保密性。现在要求编写一程序模拟传输过程,实现在 发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行 译码,即将信息还原成发送前的字符信息。实现提示在本例中设置发送者和接受者两个功能,发送者的功能包括: 输入待传送的字符信息; 统计字符信息中出现的字符种类数和各字符出现的次数(频率); 根据字符的种类数和各自出现的次数建立哈夫曼树; 利用以上哈夫曼树求出各字符的哈夫曼编码

2、; 将字符信息转换成对应的编码信息进行传送。接受者的功能包括: 接收发送者传送来的编码信息; 利用上述哈夫曼树对编码信息进行翻译,即将编码信息还原成发送前的字符信 息。从以上分析可发现,在本例中的主要算法有三个:(1) 哈夫曼树的建立;(2) 哈夫曼编码的生成;(3) 对编码信息的翻译。测试结果I諭人子符:efnujresytrgtytnyjhtuhuyr會類麵为:raw二进制码e 2 1001f 1 0010n 2 1110u 3 010j 2 1111p 3 011s 1 0011y 4 101t 4 110g 1 1000h 2 000密文为;1001001011100101111011

3、10010011101110011100011010111011101011111000110010B00010101011开始译码ef fHijpesytrgtytnyjht iihityr源代码#in clude#i nclude#in clude#in elude typedef struct int weight;int pare ntjchild,rchild;char data;HTNode,*Huffma nTree; typedef char *Huffma nCode; void ton gji(char *a,i nt *w,char *d,i nt &n) int j=0

4、;for(int i=0;i100&ai!=0;i+)for(int k=O;kvj;k+)if(ai=dk)wk+; break;if(k=j) dj=ai;wj+;j+;m=j;djAO:void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n,char *d) if(ndata=di-1;p-lchild=p-parent=p-rchild=O;p-weight=wi-1;for(;ilchild=p-pare nt=prchild=O;p-weight=0;for(i=n+1 ;iv=m;+i)int s1 ,s2,

5、u,t;for(u=1:u=i-1 ;u+)if(HTu.pare nt=0)s1 =u;break;for(u=u+1 ;uHTu.weight&HTu.parent=O) s1=u;for(t=1 ;t=i-1 ;t+)if(HTt.parent=0&t!=s1)s2=t;break;for(t=t+1 ;tHTt.weight&HTt.parent=O&t!=s1) s2=t;HTs1.parent=i;HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1 .weight+HTs2.weight;HC=new char*n+1

6、;char *cd=new charn;int start,c,f;for(i=1 ;iv=n ;+i)start;for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) if(HTf.lchild=c) cd-start=0,; else cd-start=T;HCi=new charn-start; strcpy(HCi,&cdstart); delete(cd);void bianma(HuffmanCode HC,char *a,char *d,char *bc) int m1=0,m2=0;int i=0,j;while(ai!=,0,)j=0;whi

7、le(dj!=O,) if (ai=dj) m1=0;while(HC0+1 m1!=0,) bcm2+=HCj+1 m1+; break; j+; i+;bcm2=*0; void yima(HuffmanTree HT,int n,char*bc)int m=2*n-1; for (int i=0;bci!=*0;+i)if (HTm.lchild=O) coutHTm.data; m=2*n-1;if(bci=,0,) m=HTm.lchild;elsem=HTm.rchild; coutHTm.dataendl;)void main()char a100;char d100;char bc1000;int w100,n=0;HuffmanTree HT;HuffmanCode HC;cout请输入字符:n;cin a;for(int ak=0;ak100;ak+)wak=0;tongji(a,w,d,n);HuffmanCoding(HT,HC,w,n,d);cout霍夫曼编码为:endl;cout* 原码 ”vv” 权值 ”vv” 二

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论