Huffman编码效果的唯一性

7个字符{A,B,C,D,E,F,G},这7个字符在文本中出现的次数为{5,24,7,17,34,5,13}

在构造霍夫曼树的时候发现会出现两个17,这时就有两条路可以走下去,当然,因为树的不固定会有若干种结果,比如你的A是10110,他的A是00000,但就编码长度而言都是5,这里说的两条路就是A的长度可以为4也可以为5,最后总的效果还是一样的。
第一种编码方式


A:0010 
B:01 
C:000 
D:101 
E:11 
F:0011 
G:100 
平均码长:(5*4+24*2+7*3+17*3+34*2+5*4+13*3)/105=2.542857143

第二种编码方式


A:00000
B:11
C:0001
D:10
E:01
F:00001
G:001
平均码长:(5*5+24*2+7*4+17*2+34*2+5*5+13*3)/105=2.542857143


可以看到平均码长都是一样的 2.542857143,小于不压缩的长度3。

#include 
#include 
using namespace std;
double func(double x){
	return -x*log2(x);
}
int main() {
	double a=(double)5/105,b=(double)24/105,c=(double)7/105,d=(double)17/105,e=(double)34/105,f=(double)5/105,g=(double)13/105;
	cout<

计算了一下信息熵为 2.49066,可见霍夫曼编码效果不错。

你可能感兴趣的:(Huffman编码效果的唯一性)