哈夫曼树及其应用
作者:admin来源:网络整理时间:2017-10-10

1、哈夫曼树的基本概念 

---- 霍夫曼(霍夫曼)也高处树最优二叉树,这是独一N用得体的的叶混合的树上所稍微两个,带权某方面上涂料最小的两个二元系树。

---- “某方面”执意从树说话中肯独一难题到另独一难题中间的分支扩张组成的零件,而分支扩张数的某方面的上涂料

---- 树的某方面上涂料:是从根到每个混合的的某方面上涂料和。

---- 采取得体的的结,难题带权某方面上涂料为:从混合的到根混合的中间的某方面上涂料和作品的使参与。

---- 额外的某方面上涂料WPL(额外的 path 上涂料):树中所稍微叶子及梗和枝混合的,某方面上涂料得体的。

想象独一n用得体的的叶混合的二叉树,分量{ W1,w2,....wn},每个叶混合的的额外的和,每一派叶子及梗和枝的某方面上涂料 lk,从根混合的

到分开叶子及梗和枝难题的某方面上涂料与确切的的权值的作品积和叫做二叉树的带权某方面上涂料,通常:

        

如下图所示是由与树的叶混合的4:

    

32叉树的得体的某方面上涂料:

(a)WPL=9x2+4x2+5x2+2x2=18+8+10+4=40

(b)WPL=9x1+5x2+4x3+2x3=9+10+12+6=37

(c)WPL=4x1+2x2+5x3+9x3=4+4+15+27=50

在监狱里(b)所示二叉树的WPL最小,此树是哈夫曼树。从下面的生动的显示:由n个用得体的的叶混合的所组成二叉树中,两树或完整二叉树

不明确的是最优的两棵树。大的混合的到根混合的的权值二叉树才是最优二叉树。

2、哈夫曼树的建筑的方式

1)按分量的第独一叶混合的从大到小的次为提供在独一规则序列,即D2,B4,C5,A9.

2)前两个最小分量作为一种新的混合的的混合的的子混合的N 2,最好的比较小的孩子距,在监狱里d是n的左孩子,B是右孩子。

如图2-1所示(一),两叶混合的的权值和2 4 = 6的新混合的n的加重值。

3)N1将移走D和B,为独一规则序列,所有物升序。即C5,N6,A9.

4)反复议事程序2),N和C作为一种新的混合的m两绝顶混合的。如图2-1所示(B),的M = 5 6 = 11的加重值。

5)将移走C和N,为独一规则序列,为A9,M11.

6)反复议事程序2),A和M作为独一新的混合的的子混合的T 2,鉴于T是根混合的,执行哈夫曼树的建筑的。

      

为了建筑的二叉树才是最优的哈夫曼树,经过恰当的的议事程序,可以影响的范围建筑的哈夫曼树的哈夫曼算法指路描述:

-- 1)着陆n个叶子及梗和枝难题的{ W1的分量,w2,WN } n二元树集F = { T1,T2,...Tn},仅在独一有权废除这些二元树

根难题,左、右子树为空。

-- 2)选择在F树的两个根混合的,树的最小分量为摆布两个。建筑的一棵新二叉树,且置新二叉树的根难题的权值为摆布子树上根难题

加重值和。

-- 3)切断F两树,同时将新走快二叉树平安相处F中。

-- 反复议事程序2)4)3),直到F只牵制独一树。这棵树便是哈夫曼树。

//哈夫曼树的难题典型
typedef struct HTreeNode
{
	char 创纪录的[ 5 ] 每个混合的是独一印型的,至多5个印
	int weight; 中国字的分量
	int parent; 父混合的。
	int left; 左子混合的。
	int right; 右子混合的。
}HTNode;
//哈夫曼树的建筑的,N个混合的,有2n-1个树混合的的极限的一代人
void CreateHTree(HTNode ht[],int n)
{
	int lchild,rchild;
	int min1,2
为(int i = 0;i < 2*n-1;i++)
	{
		ht[i].parent = ht[i].left = ht[i].right = -1;
	}
为(int j = n;j < 2 * n-1;j++) //前N个混合的是已知的叶子及梗和枝难题,建筑的n之后的难题
	{
		min1 = min2 = 32767;
		lchild = rchild = -1;
	为(int k = 0;k

3、哈夫曼编码

---- 哈夫曼编码是哈夫曼树的独一运用。在数字信息系统,概括地必要将译本替换为二元系印0、1二元系印串,这么地做事方法是

相同的编码。在物的信息,永远预料尽量的存储管理服务加密,采取哈夫曼编码建筑的的教科书的总长最短。

---- 由知识,音讯说话中肯每个印的概率是差异的。想象在独一音讯,A,B,C,D第四印的概率为4 / 10,1/10,3/10,

2/10,假如不同长编码,让较长的编码的低频指路,可以缩存储管理服务信息的总上涂料。

---- 运用易变的东西上涂料编码转移含糊和歧义两D。0 C的想象,01 D,当接纳到的编码印串01,解码0,即时译员

C,继下独一印是1个印对应的D.,为了就发生了两个意思。 到这程度,若易变的东西上涂料编码印集,则索赔印集合

印编码缺勤宁静的印编码的前缀,为使满意这一索赔的编码称为前缀编码

---- 为了使延长编码为前缀编码。,每个印可以作为独一印集的叶混合的出示独一TW,为了实现预期的结果存储管理服务的上涂料,可将

每个印涌现的频率作为加重值的指路作出了确切的的叶混合的,最短的树最小额外的某方面上涂料编码物。

---- 可以着陆哈夫曼算法建筑的哈夫曼树T。必要设置上述的音讯编码印集D = {,B,C,D},涌如今音讯的频率设定P = { 4 / 10,1/10,3/10,2/10}

敝运用独一印集的印作为叶子及梗和枝难题、鉴于加重值的频率,建筑的一棵哈夫曼树。

                     

在监狱里,每个混合的对应独一印,在T的边界附近的成绩,把左分支扩张记为0,右分支扩张象征为1。从根混合的到印的印编码的明确

某方面上的混合的,成绩的每一面是独一序列的霍夫曼编码。

---- 独一编码:0,C编码:10,D编码:110,B编码:111.

显然,无论什么印集,永远构造二叉树编码。鉴于在无论什么独一从根混合的到叶混合的的某方面将不熟练的涌如今,

因而经过这种方式编码的前缀编码,经过遍历二叉树,可以作出每个印的编码。

热点关键词
本站澳门彩票 - 澳门彩票公司 - 澳门彩票有限公司,所有信息和图片来自网络,不代表本站观点!
Copyright © 2016-2017 澳门彩票 - 澳门彩票公司 - 澳门彩票有限公司 版权所有    京ICP备12047666号-1