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 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 请按任意键继续. . .



