1、实验名称:霍夫曼编码
2、实验环境
软件环境:Windows 2000,Microsoft Visual C++6.0
硬件环境:P4,2.4GHz,256内存,IBM-PC及兼容机
3、实验目的
掌握霍夫曼编码、译码原理,并能够通过程序模拟其编码、译码功能。
4、实验原理
1、消息按其出现的概率由大到小地排成一个概率序列;
2、把概率最小两个消息分成一组,其中一个消息编为0,另一个编为1,然后求其概率和,并把这个新概率与其他尚未处理过的概率重新按概率由大到小排成一个新的概率序列;
3、重复步骤,直到所有概率都已联合处理完为止。
5、实验过程与实验结果
源程序:
#include
#include
using namespace std;
#include
typedef struct{//霍夫曼树的结构体
char ch;
double weight; //权值,此处为概率
int parent,lchild,rchild;
}htnode,*hfmtree;
typedef char **hfmcode;
/*****************************全局变量*****************************/
hfmtree HT;
hfmcode HC;
int n=0;//霍夫曼树叶节点个数
int m=0;//霍夫曼树所有节点个数
int *code_length;//用于记录每个消息字符的码长
/*****************************霍夫曼编码模块*****************************/
//对输入的字符进行检验
int Input_Char_Check()
{
int flag=1;
int j;
for(int i=1;i { for(j=i+1;j<=n;j++) if(HT[j].ch==HT[i].ch) { flag=0; break; } } return flag; } //对输入的概率进行检测 int Input_Weight_Check(){ int flag=0;