高分悬赏!有关哈夫曼(huffman)编码

来源:百度知道 编辑:UC知道 时间:2024/05/27 09:11:13
有一个程序是哈夫曼编码的,但不是很懂,请帮我解释一下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;

#define N 100
typedef struct
{
double probobility;
int lnode;
int rnode;
} node;

node tree[N];
int p = 0, total = 0;
char stk[N], q = 0;
int used[N], node_len[N];

void print_code()
{
int i = 0;
for (i = 0; i < q; i++)
{
cout << stk[i];
}
}

void print_avg_len()
{
int i;
double avg_len = 0;
for(i = 0; i < total; i++)
{
avg_len += tree[i].probobility * (double)node_len[i];
}
cout << "The average length is " << avg_len << endl;
}

int find_min()
{
int i_min = 0;
int i;
while (used[i_min] && i_min < p)
{<

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;

#define N 100 //最大的节点数目
/*每个信号节点的结构体
double probolity 频率
int lnode 左节点
int rnode 右节点
*/
typedef struct
{
double probobility;
int lnode;
int rnode;
} node;

node tree[N]; //定义一个存储节点的数组,各个节点存在这里
int p = 0, total = 0;
char stk[N], q = 0; //这个q是节点数目,stk[N]是密码存储的场所
int used[N], node_len[N]; //use[N]存储使用过点,node_len[N],存储改点密码长度

void print_code()
{
int i = 0;
for (i = 0; i < q; i++)
{
cout << stk[i];
}
}

void print_avg_len() //计算密码的平均长度,概率×相应点密码长度的和
{
int i;
double avg_len = 0;
for(i = 0; i < total; i++)
{
avg_len += tree[i].probobility * (double)node_len[i];
}
cout <