实验二 Huffman 编码
已知:信源符号个数q ,信源符号0s ,1s ,…1q s -,信源分布0p ,1p ,...,1q p -。 算法:
1. 如果q=2则返回编码:0s ∣→0,1s ∣→1;
2. 否则
a) 按照递减重新排序0s ,1s ,…1q s -和0p ,1p ,...,1q p -; b) 创建一个符号s ’,其概率为p ’=2q p -+1q p -;
c) 递归调用本算法以得到0s ,1s ,…3q s -,s ’的编码0w ,1w ,…,3q w -,w ’,它的概率
分布为0p ,1p ,...,3q p -,p ’;
d) 返回编码:0s ∣→0w ,1s ∣→1w ,…, 3q s -∣→3q w -,2q s -∣→w ’0,
1q s -∣→w ’1。
要求:
1. 允许使用的编程语言:C,C++,Basic ,Pascal ,Fortran ,Java ,Perl ,Tk/Tcl 。
2. 输入:信源符号个数、每个信源符号的概率分布在运行时从键盘输入。
3. 输出:信源符号与码字的对应关系表(编码表)
4. 源程序格式整齐清晰,注视简单明了。
源程序代码:
#include #include
/*huffman tree 结构定义*/ typedef struct {
float weight; int flag; int parent; int lchild; int rchild; }huffnode;