在考研数据结构里一般小的数据量用眼瞅法就可以实现,但是!若数据量变大,这种方法很容易变得困难和不准确。
哈夫曼树的构建方法可以通过使用优先队列(最小堆)进行自动排序和合并,极大地减少了手动计算和尝试的复杂性。
eg:天津大学2007年实做题
2,3,5,7,11,13,17,19,23,29,31,37,41构建哈夫曼树
初始化:将所有权值视为单个节点放入优先队列(最小堆),初始节点有如下13个权值。
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]
我懒得插入图片了,就按照以下的步骤顺序画哈夫曼树就行,超顺利,而且权值一定最小
步骤1:从队列中选取权值最小的两个节点 2 和 3,合并成一个新的节点,权值为 2 + 3 = 5,将其插入队列。
[5, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]
步骤2:取出最小的两个节点 5 和 5,合并为一个新的节点,权值为 5 + 5 = 10,并插入队列。
[5, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]
步骤3:继续取出最小的两个节点 7 和 10,合并为 17,并插入队列。
[11, 13, 17, 17, 19, 23, 29, 31, 37, 41]
步骤4:取出最小的两个节点 11 和 13,合并为 24,并插入队列。
[17, 17, 19, 23, 24, 29, 31, 37, 41]
步骤5:取出 17 和 17,合并为 34,插入队列。
[19, 23, 24, 29, 31, 34, 37, 41]
步骤6:取出 19 和 23,合并为 42,插入队列。
[24, 29, 31, 34, 37, 41, 42]
步骤7:取出 24 和 29,合并为 53,插入队列。
[31, 34, 37, 41, 42, 53]
步骤8:取出 31 和 34,合并为 65,插入队列。
[37, 41, 42, 53, 65]
步骤9:取出 37 和 41,合并为 78,插入队列。
[42, 53, 65, 78]
步骤10:取出 42 和 53,合并为 95,插入队列。
[65, 78, 95]
步骤11:取出 65 和 78,合并为 143,插入队列。
[95, 143]
步骤12:最后,取出 95 和 143,合并为 238,最终形成根节点。
[238]
哈夫曼树总结
通过以上步骤,所有权值已合并形成一个完整的哈夫曼树,根节点权值为 238。树的构建过程以最低代价合并权值的方式进行,确保了哈夫曼树的最优性。
考研数据结构:哈夫曼树构建方法
265

被折叠的 条评论
为什么被折叠?



