热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

哈夫曼树的构造(转载)

哈夫曼树的构造(转载)2012-03-0613:31:48|分类:数据结构|举报|字号订阅构造哈夫曼树的过程是这样的http:patapa

哈夫曼树的构造(转载)  

2012-03-06 13:31:48|  分类: 数据结构|举报|字号 订阅







构造哈夫曼树的过程是这样的 http://patapatapon.blog.163.com/blog/static/2040442392012261186656/

一、构成初始集合

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

二、选取左右子树

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

三、删除左右子树

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

四、重复二和三两步,

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

举个例子

有个序列是(7,9,2,6,32,3,21,10)

叫你求哈夫曼树

步骤一:把这些点都看成是一个只有根结点的树的集合F

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

步骤二,选2个值最小的树     

哈夫曼树的构造 - FlyMosquito - 伴随着你哈夫曼树的构造 - FlyMosquito - 伴随着你
 

步骤三:在这些树的集合F中删除这2棵树

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

然后把 哈夫曼树的构造 - FlyMosquito - 伴随着你构成一颗二叉树

变成了哈夫曼树的构造 - FlyMosquito - 伴随着你(5 = 2 + 3)

然后把这个树加入到集合F

哈夫曼树的构造 - FlyMosquito - 伴随着你
 
哈夫曼树的构造 - FlyMosquito - 伴随着你

  

5代表这棵树的权值

然后继续上述步骤

肯定是选 和 

把这2个构成二叉树

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

F中删除5 6 加入11这棵树

变成了

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

继续上述步骤

选7 和 9

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

F中删除9

 加入16这棵树

变成了

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

继续上述步骤

选 10 11

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

F中删除10 11 加入21这棵树

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

继续上述步骤

1621 (有221,随便选哪个)

我选那个只有一个根结点的21好了

1621构成二叉树 

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

F中删除这1621这两棵树

加入37这棵树

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

继续上述步骤

2132

构成二叉树

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

F中删除21322两棵树

加入53这棵树

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

哈夫曼树的构造 - FlyMosquito - 伴随着你

还是继续上面步骤

F中的两棵树合并成一棵树

哈夫曼树的构造 - FlyMosquito - 伴随着你
 

完成了!

这个就是哈夫曼树



推荐阅读
  • 本文介绍了如何在Spring框架中使用AspectJ实现AOP编程,重点讲解了通过注解配置切面的方法,包括方法执行前和方法执行后的增强处理。阅读本文前,请确保已安装并配置好AspectJ。 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • iOS 百度地图使用指南:基本定位与地理编码
    本文详细介绍如何在 iOS 应用中集成百度地图,实现基本的地图定位和地理编码功能。配置详情请参考官方文档:http://developer.baidu.com/map/index.php?title=iossdk ... [详细]
  • 本文介绍了如何使用Aspose库将Office文件(如Word、PowerPoint)转换为HTML文件,并详细说明了在转换过程中可能出现的乱码问题及其解决方案。 ... [详细]
  • 优先队列是一种特殊的队列,不遵循先进先出原则。它分为最大优先队列和最小优先队列。最大优先队列总是将当前最大的元素优先出队,而最小优先队列则总是将当前最小的元素优先出队。本文将详细介绍如何使用二叉堆在C#中实现这两种优先队列。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • http:blog.csdn.netzeo112140articledetails7675195使用TCPdump工具,抓TCP数据包。将数据包上传到PC,通过Wireshark查 ... [详细]
  • ipsec 加密流程(二):ipsec初始化操作
    《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author:叨陪鲤Email:vip_13031075266163.comDate:2020.1 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
  • C语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ... [详细]
  • Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ... [详细]
  • 高效重装Windows 10系统指南
    如何快速地为您的电脑重装Windows 10系统?本文将详细介绍从下载系统镜像到安装完成的每一步操作。 ... [详细]
  • 近年来,区块链技术备受关注,其中比特币(Bitcoin)功不可没。尽管数字货币的概念早在上个世纪就被提出,但直到比特币的诞生,这一概念才真正落地生根。本文将详细探讨比特币、以太坊和超级账本(Hyperledger)的核心技术和应用场景。 ... [详细]
  • 今日深入研究了树状数组,感觉难度较大,通过课件和博客辅助学习,仍有许多疑惑。主要探讨了老师推荐的三道题目,初步掌握了树状数组的基本用法。同时,还学习了逆序数和离散化的概念及其应用。 ... [详细]
  • 欧拉法与龙格-库塔法在微分方程求解中的对比分析
    本文探讨了计算机如何理解和模拟连续系统的动态特性,重点介绍了欧拉法和龙格-库塔法这两种常用的数值积分方法。通过详细的理论分析和MATLAB代码实现,对比了两种方法在求解微分方程时的性能和适用性。 ... [详细]
author-avatar
mobiledu2502881513
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有