当前位置: 首页 > 编程日记 > 正文

哈夫曼树的构造

[转载于网易博客,具体地址不详]

构造哈夫曼树的过程是这样的

一、构成初始集合

对给定的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 - 伴随着你

完成了!

这个就是哈夫曼树

相关文章:

物联网时代全面降临

从智能建筑到零售,英特尔物联网解决方案可以说是华丽丽地惊艳着大家的大脑和眼球,一切的不可能似乎都在朝着可能的方向努力着。在2015 MWC上,英特尔再次用各种神奇的物联网设备告诉大家:物联网时代已经来临。 “半边天”的力量&am…

Linux C++/Java/Web/OC Socket网络编程

一,Linux C Socket网络编程 1.什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设…

ASP.NET抓取其他网页代码

在.Net 平台下,创建一个ASP.Net的程序 1、引用两个NAMESPACE using System.Text //因为用了Encoding类 using System.Net //因为用了WebClient 类 2、整个程序用了三个控件 txtUrl //输入你要获取的网页地址 TEXTBOX控件 txtBody //得到你要获取的网…

特斯拉遇上 CPU:程序员的心思你别猜

作者 | 码农的荒岛求生来源 | 码农的荒岛求生图源 | 视觉中国18世纪流水线的诞生带来了制造技术的变革,人类当今拥有琳琅满目物美价廉的商品和流水线技术的发明密不可分,因此当你喝着可乐、吹着空调、坐在特斯拉里拿着智能手机刷这篇文章时需要感谢流水线…

《算法技术手册》一2.4.6 二次方的算法性能

2.4.6 二次方的算法性能 现在考虑一个类似的问题:两个n位的整数相乘。例2-4展示了使用小学课堂上学过的算法实现的乘法运算,其中n位数字的表示方法与之前的加法一样。 例2-4:mult乘法的Java实现 public static void mult (int[] n1, int[] n2…

如何使用 OpenCV 实现图像均衡?

来源 | 小白视觉志头图 | 下载于视觉中国我们已经练习了很多图像处理——操作图像(精确地说是图像矩阵)。为此,我们探索了图像的均衡方法,以便在一定程度上增强对比度,以使被处理的图像看起来比原始图像更好&#xff0…

《中国人工智能学会通讯》——1.42 理解情感

1.42 理解情感 安德鲁摩尔认为,人工智能能“感受”人类情感是人工智能研究领域最重要、也最先进的一个方向。扬波利斯基认为,计算机能够理解语言的能力最终会向人和计算机“无缝沟通”的方向发展。 越来越精准的图像、声音和面部识别系统能让计算机更好探…

matlab中help所有函数功能的英文翻译

doc funname 在帮助浏览器中打开帮助文档help funname 在命令窗口打开帮助文档helpbrowser 直接打开帮助浏览器lookfor funname 搜索某个关键字相关函数demo 打开视频教程 转http://blog.renren.com/share/239121107/690877048 里面有些不全的,自己用到的已添加…

C# 静态构造函数

(1)用于对静态字段、只读字段等的初始化。 (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。 (3)类的静态构造函数在给定应用程序域中…

破解数据流通痛点,华控清交的隐私计算之道

从无序中寻找踪迹,从眼前事探索未来。 正值 IT 黄金十年新开端, CSDN 欲以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,现在推出年度重磅企划栏目——「拟合」,通过对话企业高管大咖,跟踪报…

mac系统添加VSCode到右键菜单(转)

转自:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001470969077294a6455fc9cd1f48b69f82cd05e7fa9b40000 在Mac系统上,Finder选中一个目录,右键菜单并没有“通过Code打开”这个操作。不过我们可以…

在 C# 中通过 P/Invoke 调用Win32 DLL

,.NET Framework 1.0 或 1.1 版类库中存在任何 Windows 所没有的功能限制都不足为怪。毕竟,32 位的 Windows(不管何种版本)是一个成熟的操作系统,为广大客户服务了十多年。相比之下,.NET Framework 却是一个…

xp/2003开关3389指令

开启3389: echo offtitle 开启3389clsrem 开启3389reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f >nulecho.echo 提示你:3389已经开启 关闭3389&…

TIOBE 新榜单:Python 超越 Java 重回第二,Rust 崛起

作者 | 苏宓出品 | CSDN(ID:CSDNnews)TIOBE 官方最新发布了 5 月的编程语言榜单,不妨一起来看一下本月榜单中又有哪些最新的变化呢?Python 重回第二和 4 月相比,本月榜单的 TOP 10 中变化最大的非 Python 与…

Docker编排工具Fig介绍

本文讲的是Docker编排工具Fig介绍,【编者的话】Fig是一个基于Docker的用于快速搭建开发环境的工具,目前Fig团队已经加入Docker公司。Fig通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。Fig可以和Docker一起来…

java调用ffmpeg,mencoder进行视频转换,读取时长等

2019独角兽企业重金招聘Python工程师标准>>> 以前做的一个基于ffmpeg的视频格式转换的程序,现在抽空整理一下,很多地方都是从别的大神那借鉴的,只是把自己的觉得有用的,对别人有帮助的拿出来分享分享,下面是…

数字人民币实现可控匿名交易?产业升级离不开安全可信的“数字底座”

自央行进行数字人民币试点测试工作以来,人们讨论最多的可能是它的便捷性、匿名性。不过,它的意义远不止于人类个体层面。 作为一种面向未来的货币形式,在未来数字经济时代,央行数字人民币的普及无疑将加速全球资产数字化和身份数…

apache+tomcat 搭建负载均衡系统

apachetomcatmod_jk 搭建负载均衡系统。0.os系统采用centos6.8 x64 2.6.32-642.el6.x86_641.首先安装好jdk环境本次采用jdk-8u111-linux-x64.gz jdk和jre的安装目录要不同,否则的话lib目录下没有dt.jar 和tools.jar 要配置好环境变量如下 vi /etc/profile #ad…

从普本到北大:我的跨校跨专业考研经验

首先做一个我考研情况的简介。 经历了2013年考研的混战,据说是史上考研人数顶峰的年份,因为2014改革,不再有自费生之后,人民群众对于所谓学术硕士的需求量激减,继 而投奔价格费用相当,读书年份较少的专业硕…

C#中使用DirectX编程

我感觉声音的播放比较简单。我们从播放声音开始。为什么我这么觉得?我也不知道。这里是展示最最最最最简单的DirectX播放声音的例子,我尽量省略了无关的代码。最后的代码只有19行,够简单了吧? 准备工作:1.安装了Direc…

40+场面试,100%通过率,我想分享的14条经验

来源 | 陈同学在搬砖头图 | 下载于视觉中国大家好,我是陈同学,首先来一个简单的自我介绍和个人的经历分享。我的本科和硕士均就读于哈工大,在研究生期1年时间内自学操作系统、计算机网络、C、数据结构等,累计学习30本书、500博客文…

云端卫士架构师讲DDoS攻击的智能防御之道

DDoS即分布式拒绝服务攻击,这是一场关乎资源的较量,攻击者通过自己控制的大量僵尸主机,向目标设施(服务器、运营商网络和基础架构等)发起洪水猛兽般的流量型攻击,或是连绵不绝的应用型攻击。 如果将受害者比…

C#中方法参数的四种类型

C#中方法的参数有四种类型:-值参数:不含任何修饰符。方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的。-引用参数:以ref修饰符声明。传递的参数实…

赠书 | 算力时代,用 Python 来快速解决复杂问题

Python作为一种编程语言,拥有简洁、高效的表达能力。与此同时,Python语言环境中还配备各种软件库,即模块。结合实际问题,选择适当的模块,便可生成简单、快速、正确的程序。书中列举了一些数值计算的简单例题&#xff0…

用for实现Go的while和do...while

Go的while和do...while实现 Go语言没有while和do...while语法,我们可以通过for实现:即break在业务代码执行前相当与while,break在业务代码执行后相当do...while while for {if condition {break}xxxxxxxx } do...while for {xxxxxxxxif cond…

DTCC:数据库安全重点在数据拷贝过程中

本文讲的是DTCC:数据库安全重点在数据拷贝过程中,2017年5月11日-13日,2017中国数据库技术大会于北京国际会议中心盛大开幕。作为国内最受关注的数据库技术大会,本届大会以“数据驱动价值发现”为主题,汇集多个领域的百…

Log4J配置方式Java工程测试

2019独角兽企业重金招聘Python工程师标准>>> Log4J配置方式 1、 导入jar包 Commons-logging .jarLog4j-1.2.17.jar2、 编写log4j.properties 文件 ############## ############################## 优先级 INFO ,输出到console_log 和filelog 两个位置 log4j.root…

C#“装箱”(boxing)与“拆箱”(unboxing)

装箱和拆箱:任何值类型、引用类型可以和object(对象)类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)…

无人机、IoT 设备都有漏洞?专访以色列老牌安全企业Check Point | 拟合

从无序中寻找踪迹,从眼前事探索未来。2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

sql server 在占用服务器内存居高不下怎么办【转】

在管理一个测试服务器的时候,内存使用率居高不下,在资源管理器中查看到 sql server 2008 占用了80%的系统资源,于是找到了一下资料,并解决了Sql Server 2008 占用内存过大的问题。 转自百度经验http://jingyan.baidu.com/article…