- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
我在学习2018之堆或者优先队列
堆或者优先队列 啊哈原文请点击我们先来了解一下树:1、一棵树中的任意两个结点有且仅有唯一的一条路径连通。2、一棵树如果有n个结点,那么它一定恰好有n-1条边。 如果一棵二叉树除了最右边位置上一个或者几个叶结点缺少外其它是丰满的,那么这样的二叉树就是完全二叉树。严格的定义是:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,就是完全二叉树。也就是说如果一个结点有右子结点,那么它一定也有左子结点。其实你可以将满二叉树理解成是一种特殊的或者极其完美的完全二叉树。完全二叉树如果二叉树中每个内部结点都有两个儿子,这样的二叉树叫做满二叉树。或者说满二叉树所有的叶结点都有同样的深度。满二叉树的严格的定义是一棵深度为h且有2h-1个结点的二叉树。满二叉树比如说2号结点是4、5号结点的父结点,那么左结点4=2*2那么右结点5=2*2+1一棵完全二叉树如何存储呢?其实完全二叉树中父亲和儿子之间有着神奇的规律,我们只需用一个一维数组就可以存储完全二叉树。首先将完全二叉树进行从上到下,从左到右编号。见左图通过左图我们发现如果完全二叉树的一个父结点编号为k,那么它左儿子的编号就是2*k,右儿子的编号就是2*k+1。如果已知儿子(左儿子或右儿子)的编号是x,那么它父结点的编号就是x/2,注意这里只取商的整数部分。在C语言中如果除号‘/’两边都是整数的话,那么商也只有整数部分(即自动向下取整),即4/2和5/2都是2。另外如果一棵完全二叉树有N个结点,那么这个完全二叉树的高度为log2?N简写为log N,即最多有log N层结点。完全二叉树的最典型应用就是——堆。那么堆又有什么作用呢?请关注:堆——神奇的优先队列。堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。有没有发现左图这棵二叉树有一个特点,就是所有父结点的值都比子结点的值要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点的值都比子结点的值要大,这样的完全二叉树称为最大堆。左图很显然最小的数就在堆顶,假设存储这个堆的数组叫做h的话,最小数就是h[ 1]。特别注意:最小堆并不是完全从小到大排序好的,只是保证所有父结点的值都比子结点的值小就可以了。理所当然堆顶就是最小的,那堆的这一特性究竟有什么用呢??假如有14个数分别是99、5、36、7、22、17、46、12、2、19、25、28、1和92。请找出这14个数中最小的数,请问怎么办呢?最简单的方法就是将这14个数从头到尾依次扫一遍,用一个循环就可以解决。这种方法的时间复杂度是O(14)也就是O(N)。for(i=1;i=14;i++){?if(a[?i]min)????min=a[?i];}?现在我们需要删除其中最小的数,并增加一个新数23,再次求这14个数中最小的一个数。请问该怎么办呢?只能重新扫描所有的数,才能找到新的最小的数,这个时间复杂度也是O(N)。如果现在有14次这样的操作(删除最小的数后并添加一个新数)。那么整个时间复杂度就是O(142)即O(N2)。那有没有更好的方法呢?堆这个特殊的结构恰好能够很好地解决这个问题。??首先我们先把这个14个数按照最小堆的要求(就是所有父结点都比子结点要小)放入一棵完全二叉树,就像下面图一这棵树一样。---------------------------------图一接下来,我们将堆顶的数删除,并将新增加的数23放到堆顶。显然加了新数后已经不符合最小堆的特性,我们需要将新增加的数调整到合适的位置。那如何调整呢?图二向下调整!我们需要将这个数与它的两个儿子2和5比较,并选择较小一个与它交换,交换之后如下。-------------------------------图三我们发现此时还是不符合最小堆的特性,因此还需要继续向下调整。于是继续将23与它的两个儿子12和7比较,并选择较小一个交换,交换之后如下。图四到此,还是不符合最小堆的特性,仍需要继续向下调整直到符合最小堆的特性为止。23和22交换位置后,我们发现现在已经符合最小堆的特性了。 图五综上所述,当新增加一个数被放置到堆顶时,如果此时不符合最小堆的特性,则将需要将这个数向下调整,直到找到合适的位置为止,使其重新符合最小堆的特性。 图六//交换函数,用来交换堆中的两个元素的值void?swap(int?x,int?y){?int?t;?t=h[?x];?h[?x]=h[?y];?h[?y]=t;}//向下调整函数void?siftdown(int?i)?//传入一个需要向下调整的结点编号i,这里传入1,即从堆的顶点开始向下调整{int?t,flag=0;//flag用来标记是否需要继续向下调整??/
您可能关注的文档
- 序号汉字书写难度注音释义.docx3.docx
- 库车县第十一幼儿园关于《创新学前教育发展模式提升学前教育质量》的报告.doc
- 应家沟固结灌浆生产性试验方案(技案2016-011).doc
- 应急准备和响应控制1.doc
- 废墟中的孩子作文700字2018.docx
- 应用弹塑性力学作业2.docx
- 康奈尔笔记5R全面篇(学霸们都在用).docx
- 廖杭小学2015教导工作计划.doc
- 延吉公交路线一览表(2015最新版).docx
- 建模过程(3课时).docx
- 2025江浙沪居民睡眠健康小调研报告.pdf
- 毕业论文的开题报告范文.docx
- 团委活动方案(拓展).docx
- 汽车智能驾驶行业深度报告:端到端与AI共振,智驾平权开启新时代.pdf
- 小核酸行业深度:技术平台和适应症不断验证,迎来销售和临床密集兑现期-华福证券-2025.3.31-65页.docx
- 医药生物行业医疗AI专题报告二多组学篇AI技术驱动精准诊断实现重要突破-25031440页.docx
- CXO行业系列报告三寒冬已过行业需求逐步回暖-25031430页.docx
- 全国租赁市场报告2025年3月_可搜索.pdf
- 玩具行业“情绪经济”专题:创新玩法+IP赋能,重新定义玩具-华鑫证券-2025.docx
- 医疗保健行业PCAB抑制剂药物深度报告抑酸药物市场空间广阔PCAB抑制剂大有可为-25.pdf
文档评论(0)