<<大话数据结构>>之浅谈哈夫曼树

你比他好一点,他不会承认你,反而会嫉妒你,只有你比他好很多,他才会承认你,然后还会很崇拜你,所以要做,就一定要比别人做得好很多。
大话数据结构修改版.png


哈夫曼树相关概念及简介


<<大话数据结构>>之浅谈二叉树 这一篇文章我对二叉树的相关知识做了一下说明,那么这一篇文章就说一下最优二叉树,也就是哈夫曼树,在说之前,我们要先了解两个概念,那就是路径长度以及树的路径长度.

图 1- 1
路径长度: 从树中的一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度.

如图 1 -1 ,比如B到D的路径长度为3,根节点到D的长度则为3,路径长度的计算还是很简单的.😌

树的路径长度 : 树的路径长度就是从树根到每一个结点的路径长度之和.

如图 1 -1,树的路径长度为 1 + 1 + 2 + 2 + 3 + 3 =12;

看完路径长度和树的路径长度,那么接下来,我们就看一下什么叫哈夫曼树.
若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径WPL长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径WPL长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
上面的一段话中说的是结点的带权路径已经哈夫曼树的概念,那么我们就可以计算图 1- 1中的二叉树的WPL值了, 二叉树的WPL值 = 5 x 1 + 15 x 2 + 70 x 3 + 10 x 3 = 335;


哈夫曼树的构造


上面对哈夫曼树的概念进行了阐述,那么问题来了,我们该如何把一棵二叉树构造成哈夫曼树呢?我们先看一下构造哈夫曼的的步骤,然后再结合的图 1 - 1 进行讲解.

哈夫曼树的构造总共分为四部分,
  • 一、构成初始集合

对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F={T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。(为方便在计算机上实现算法,一般还要求以Ti的权值Wi的升序排列。)

  • 二、选取左右子树

在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。

  • 三、删除左右子树

从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。

  • 四、重复二和三两步,

重复二和三两步,直到集合F中只有一棵二叉树为止。 举个例子

可能上面的概念比价难以理解,那么下面我们就看一下 图 2- 1是如何改造成哈夫曼树的.


图 2- 1

第一步,先把有权值得叶子结点按照从小到大的顺序排列成一个有序序列,即为A5,D10,B15,C70;

第二步,取头两个最小权值的结点作为一个新结点N1的两个子结点,注意相对较小的的孩子是左孩子,这里A就是N1的左孩子,D为N1的右孩子,如图2 -2 所示.新结点的权值为两个叶子结点的权值之和 5 + 10 = 15;

图2 - 2

第三步,将N1替换A与E,插入有序序列中,保持从小到大的排序,即 N1 15,B15,C70;

第四步,重复步骤2,将N1与B作为一个新结点N2的两个子结点,如图 2 - 3 所示, N2的权值 = 15 + 15 = 30;

图 2 - 3

第五步,将N2替换N1与B,插入有序序列中,保持从小到大的排序,即 N2 30,C70;

第六步,重复步骤2,将N2和C作为一个新结点T的两个子结点,如图2 -4 所示.由于T就是根结点,所以完成哈夫曼树的构造.

哈夫曼树的构造完成
那么我们就可以计算构造完成的哈夫曼树的路径长度WPL = 1 x 70 + 2 x 15 + 3 x 10 +3 x 5 = 145;那么2 - 2中二叉树的WPL值 = 5 x 1 + 15 x 2 + 70 x 3 + 10 x 3 = 335;WPL值差不多差了两倍...
总结:哈夫曼树又称为最优二叉树,因为他的效率是同等权值二叉树中最高的,做一程序猿简单,做一个有高效率的程序员难.与君共勉.希望这篇文章能对您有所帮助.谢谢.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容