文档介绍:哈夫曼编码器实验报告
学院:计算机学院
班级:计科 0801 班
姓名:王宇宏
学号: 04081027(27)
一.实验目的
练习树和哈夫曼树的有关操作,和各个算法程序,理解哈夫曼树的编码和译码
二.实验环境
Microsoft visual c++
三、问题描述
利用哈夫曼编码进行通信可以大大提高信道利用率, 缩短信息传输时间, 降低传输成本。 但是,这要求在发送端通过一个编码系统对待传数据预先编码, 在接收端将传来的数据进行译码(复原) 。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编码 / 译码系统。试为这样的信息收发站写一个哈夫曼编码的编码 / 译码器。
四、需求分析
1)初始化 ;从终端输入字符集的大小 n,以及 n 个字符和 n 个权值建立哈夫曼树。
2)输出哈夫曼树,及各字符对应的编码。
3)编码:利用建好的哈夫曼树,对输入的待发送电文进行编码。同时输入原文及编码串。
4)译码:利用建好的哈夫曼树,对输入的已接收电文进行译码。同时输入编码串及原文。
五、概要设计
#include <>
#include <>
#include <>
#include <>
#include <>
eight<k&&t[j].parent==0)
k=t[j].weight,flag=j;
t[flag].parent=1;
return flag;
}
arent=HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
arent;f!=0;c=f,f=HT[f].parent)
child==c)
cd[--start]='0';
else
cd[--start]='1';
HC[i]=(char*)malloc((n-start)*sizeof(char));
ata=str[i];
cou[i-a].count=1;
while(i>k)
{
if(str[i]==str[k])
{
a++;
flag=0;
}
k++;
if(flag==0)
break;
}
if(flag)
{
for(j=i+1;j<len;j++)
{if(str[i]==str[j])
++cou[i-a].count;}
}
}
n=len-a;
for(i=0;i<n;i++)
{ cout<<cou[i].data<<" "; cout<<cou[i].count<<endl;
}
for(i=0;i<=n;i++)
{*(z+i)=cou[i].data;
*(w+i)=cou[i].count;
}
Huffm