
Huffman编码,
报文中只出现5个字符{A,B,C,D,E} ,他们出现的频次分别为{3,4,5,8,10};
1)给出最经济的编码,
相当于构造一棵叶子带权分别是(3,4,5,8,10)
的最优二叉树(Huffman树)
从树中得到最经济的编码
2)并给出报文的译文长度。
#include
#include
#define N 5
/* Huffman编码,
报文中只出现5个字符{A,B,C,D,E} ,他们出现的频次分别为{3,4,5,8,10};
1)给出最经济的编码,
相当于构造一棵叶子带权分别是(3,4,5,8,10)
的最优二叉树(Huffman树)
从树中得到最经济的编码 ,
2)并给出报文的译文长度。
*/
char zf[]="ABCDE";//字符
int qz[]={3,7,9,5,6};//权值(频率)
char bmb[N][N];//编码表
//赫夫曼树
struct node{
int data;
int l;
int r;
int p;
}arr[N*2-1];
//找到arr数组最小和次小的权值
void select(struct node arr[],int k,int *m1,int *m2){
int i,m11=101,m22=102;
for(i=0;i
输出结果:
序号 父节点 左孩子 右孩子 父节点
0 3 -1 -1 5
1 7 -1 -1 7
2 9 -1 -1 6
3 5 -1 -1 5
4 6 -1 -1 6
5 8 0 3 7
6 15 4 2 8
7 15 1 5 8
8 30 6 7 -1
A的编码:100
B的编码:10
C的编码:01
D的编码:000
E的编码:11
报文的译文长度:68
--------------------------------
Process exited after 0.01589 seconds with return value 0
请按任意键继续. . .
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)