哈夫曼编码译码系统.docx

上传人:牧羊曲112 文档编号:3092718 上传时间:2023-03-10 格式:DOCX 页数:4 大小:37.80KB
返回 下载 相关 举报
哈夫曼编码译码系统.docx_第1页
第1页 / 共4页
哈夫曼编码译码系统.docx_第2页
第2页 / 共4页
哈夫曼编码译码系统.docx_第3页
第3页 / 共4页
哈夫曼编码译码系统.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《哈夫曼编码译码系统.docx》由会员分享,可在线阅读,更多相关《哈夫曼编码译码系统.docx(4页珍藏版)》请在三一办公上搜索。

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

2、曼编码; 将字符信息转换成对应的编码信息进行传送。 接受者的功能包括: 接收发送者传送来的编码信息; 利用上述哈夫曼树对编码信息进行翻译,即将编码信息还原成发送前的字符信息。 从以上分析可发现,在本例中的主要算法有三个: 哈夫曼树的建立; 哈夫曼编码的生成; 对编码信息的翻译。 测试结果 源代码 #include #include #include #include typedef struct int weight; int parent,lchild,rchild; char data; HTNode,*HuffmanTree; typedef char *HuffmanCode; voi

3、d tongji(char *a,int *w,char *d,int &n) int j=0; for(int i=0;i100&ai!=0;i+) for(int k=0;kj;k+) if(ai=dk) wk+; break; if(k=j) dj=ai; wj+; j+; n=j; dj=0; void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n,char *d) if(n=1)return; int m=2*n-1; HT=new HTNodem+1; HuffmanTree p; int i; for(p=H

4、T+1,i=1;idata=di-1; p-lchild=p-parent=p-rchild=0; p-weight=wi-1; for(;ilchild=p-parent=p-rchild=0; p-weight=0; for(i=n+1;i=m;+i) int s1,s2,u,t; for (u=1;u=i-1;u+)if(HTu.parent=0)s1=u;break; for(u=u+1;uHTu.weight&HTu.parent=0) s1=u; for(t=1;t=i-1;t+) if(HTt.parent=0&t!=s1)s2=t;break; for(t=t+1;tHTt.w

5、eight&HTt.parent=0&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; char *cd=new charn; cdn-1=0; int start,c,f; for(i=1;i=n;+i) start=n-1; for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) if(HTf.lchild=c) cd-start=0; else cd-start

6、=1; 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; while(dj!=0) if (ai=dj) m1=0; while(HCj+1m1!=0) bcm2+=HCj+1m1+; break; j+; i+; bcm2=0; void yima(HuffmanTree HT,int n,char*bc) int m=2*n-1; for

7、(int i=0;bci!=0;+i) if (HTm.lchild=0) coutHTm.data; m=2*n-1; if(bci=0) m=HTm.lchild; else m=HTm.rchild; coutHTm.dataendl; void main char a100; char d100;char bc1000; int w100,n=0; HuffmanTree HT; HuffmanCode HC; couta; for(int ak=0;ak100;ak+)wak=0; tongji(a,w,d,n); HuffmanCoding(HT,HC,w,n,d); cout霍夫曼编码为:endl; cout原码 权值 二进制码endl; for(int s=0;sn;s+)coutds ws HCs+1endl; bianma(HC,a,d,bc); cout密文为:; coutbcendl; cout开始译码:endl; yima(HT,n,bc);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号