配对堆中文版.ppt_第1页
配对堆中文版.ppt_第2页
配对堆中文版.ppt_第3页
配对堆中文版.ppt_第4页
配对堆中文版.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

配对堆,actual complexity,配对堆,amortized complexity,配对堆,以上数据显示配对堆可以秒杀斐波那契堆。 容易理解 常数较小 代码量小,定义,配对堆是一个最小 (最大)配对堆是一个用指定的操作完成的最小 (最大) 堆,顶点结构,儿子 指向儿子列表的第一个元素 左、右指针 用双链表作为儿子列表 第一个节点的左指针指向父亲 x是儿子列表的起点当且仅当x.left.son=x 数据 ps:无需记录父亲节点、顶点的度和被切除标记(斐波那契堆的一个标记),合并两个最大堆,比较、链接操作 比较根大小 把较小的根作为较大根的子树,+,=,时间复杂度 o(1).,插入,建立一个包含要插入节点的树,然后把这个树和原树合并,+,insert(2),=,插入,建立一个包含要插入节点的树,然后把这个树和原树合并,+,insert(14),=,时间复杂的 o(1).,最坏情况度数,按9,8,7.,1的顺序插入节点,最坏度数 = n 1.,最坏情况高度,按1,2,3.,n的顺序插入节点,最坏高度 = n.,更改节点值,因为顶点没有父亲域,所以我们不能很容易的去判断节点的值是否大于父亲 所以,我们把节点脱离双向链表并与原数合并,更改节点值,如果这个节点不是根,把以它为根的子树从原树中切除出来,更改节点值,把切除的树与原树合并,1,2,6,9,2,18,3,3,更改节点值,2,18,3,3,时间复杂度 o(1).,删除最大值,如果堆空,返回错误 否则,删除根节点,并把所有子树合并 如何合并子树 好方法 = 平摊复杂度o(log n) 坏方法 = 平摊复杂度o(n),用坏方法去合并子树,currenttree = first subtree. for (each of the remaining trees) currenttree = comparelink(currenttree, nexttree);,例子,删除最大值,合并成一棵树,例子,插入时间耗费 1. 删除最大值的时间耗费为根的度 n/2 插入 (9, 7, 5, 3, 1, 2, 4, 6, 8) 其次是 n/2 个移除最小值 插入时间耗费 n/2. 移除最大值耗费 1 + 2 + + n/2 1 = q(n2). 如果一次插入平摊复杂度为 o(1), 移除最大值平摊就是q(n).,用好方法合并子树,两步合并 多步合并 拥有相同的时间复杂度 通过观察,两两合并的实际效率更好,两步合并,第一步 从左到右遍历根节点的子树 把子树两两合并,使子树减少一半 如果包含奇数个子树,则剩余的子树跟最后的子树合并 第二步 从第一步完成后,最右边的子树开始 从右到左,把剩余子树和最右的子树合并,两步合并举例,pass 1,两步合并举例,pass 2,多步合并,把所有根节点的子树放入一个队列中 不断执行如下操作,直到队列中只有一个元素 从队列中取出两个子树 把它们合并 把合并后的树放入队列,多步合并举例,多步合并举例,多步合并举例,时间复杂度o(n).,删除非根元素,把这个节点从双向链表中取出 使用“两步合并”或“多步合并”法合并它的子树 把合并后的树与原树合并,删除元素,把节点从原树中切除,删除元素,合并这个元素的儿子,2,4,3,3,1,2,6,9,4,5,1,6,1,3,2,4,删除元素,与原树合并,1,2,6,9,4,5,1,6,1,3,2,4,2,3,3,删除元素,1,2,6,9,4,5,1,6,1,3,2,4,2,3,3,时间复杂度 o(n).,译者说明,配对堆一直是我遇到的一个比较冷门但是很实用的数据结构。 它可以在o(1)的情况下做到更改元素值,如果把它套到dijkstra上,那么dijkstra的时间复杂度会降到o(m+n log n) 而且,配对堆并不像斐波那契堆那样难写,很容易实现,译者说明,配对堆用一种很巧妙的方法,实现了如此实用的功能 在某些题中,可以用配对堆去骗分(像最

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论