全文预览

数据结构哈夫曼编码

上传者:叶子黄了 |  格式:doc  |  页数:9 |  大小:324KB

文档介绍
ld!=0){p=HT[p].rchild;cd[cdlen++]='1';}}else{//HT[p].weight==2,退回退到父结点,编码长度减1HT[p].weight=0;p=HT[p].parent;--cdlen;}}}//HuffmanCodingvoidmain(){HuffmanTreeHT;HuffmanCode*HC;int*w,n,i;puts("输入字符数:");scanf("%d",&n);HC=(HuffmanCode*)malloc(n*sizeof(HuffmanCode));w=(int*)malloc(n*sizeof(int));printf("输入%d个字符的权值\n",n);for(i=0;i<n;i++)scanf("%d",&w[i]);HuffmanCoding(HT,HC,w,n);puts("\n各结点的哈夫曼编码:");for(i=1;i<=n;i++)printf("%2d(%4d):%s\n",i,w[i-1],HC[i]);getchar();}五、调试结果六、实验分析哈夫曼编码是动态变长编码,临时建立概率统计表和编码树。概率小的码比较长,概率小的码比较长。概率大的码短,这样把一篇文件编码后,就会压缩许多。从树的角度看,哈夫曼编码方式是尽量把短码都利用上。首先,把一阶节点全都用上,如果码字不够时,然后,再从某个节点伸出若干枝,引出二阶节点作为码字,以此类推,显然所得码长最短,再根据建立的概率统计表合理分布和放置,使其平均码长最短就可以得到最佳码。利用哈夫曼编码进行通信可以大大提高信息的利用率,缩短信息传递时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。对于双工信息,每边都需要一个完整地遍、译码系统。该实验就是运用这样的信息收发站写一个哈夫曼码的编系统。

收藏

分享

举报
下载此文档