哈夫曼树

最优二叉树,又称为赫夫曼树,是一类带权路径长度最短的树。

         下面介绍一下基本概念,从树中的一个结点到另外一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目称为路径长度。树的路径长度是从树根到每一个结点的路径长度之和。树的带权路径长度为树中所有叶子结点的带权路径长度之和。其中带权路径长度最小的二叉树·称作最优二叉树或赫夫曼树。

         举个例子,下图三个二叉树:


他们的带权路径长度分别为:

7*2+5*2+2*2+4*2=36

7*3+5*3+4*2+2*1=46

7*1+5*2+2*3+4*3=35

其中以c树最短,说明c树就是赫夫曼树。

那么赫夫曼树有什么作用呢?这里举一个小例子。就是一个最简单的百分制转五分制的程序,只需要利用条件语句就能执行完成。比如以下代码:

function getValue(a){
	var b;//五分制等级
	if(a<60) b='bad';
	else if(a<70) b='pass';
	else if(a<80) b='general';
	else if(a<90) b='good';
	else b='excellent';
	document.write(b);
}

但是实际生活中,分数的分布是一个概率性事件,也就是说,我们要考虑上述文件的质量问题,即其操作所需时间。现在假设其分布规律如下图:


则80%的数据需要比较三次或三次以上才能得出结果。所以我们应该进行如下修改:

哈夫曼树_第1张图片


         这样就可以大大的减小比较次数了。

         那么如何构建赫夫曼树呢?构建步骤如下图,相信聪明人一看就懂了:

哈夫曼树_第2张图片






你可能感兴趣的:(哈夫曼树)