算法导论 斐波那契堆

  1. 定义

    1. 堆H

      1. 最小结点min:指向最小关键字key的根结点
      2. n表示当前堆中结点的个数
    2. 结点x
      1. 最小堆性质:每个结点的关键字key均大于等于父结点的关键字
      2. 根链表:所有的根结点都通过left,right指针形成一个环形链表
      3. 父类指针为p,左右兄弟结点为left,right,指向任何一个子结点指针为child,孩子的数目为degree,mark是否失去过孩子
  2. 操作

    1. 插入结点:直接在根链表最后插入结点
    2. 抽取最小结点:将最小结点的子结点最入到根链表中,然后删除最小结点,并合并链表
    3. 合并根链表:用一个数组保存各个根链表结点的度数,度数相同则合并
    4. 结点关键值减值:直接将关键字修改,如果小于父类,则将该关键字放在根链表中,并将父类mark改为true,两次mark则要将父类结点放到根链表中
    5. 删除:先将结点关键字改为最小值,然后调用抽取最小结点方法
  3. 源代码

    1. https://gitee.com/beimuaihui/LayaAir/blob/my_introduction_to_algorithms/src/samples/algorith/C19FibHeap.ts
    2. 堆合并union时是放在根结点链表最后,consolidate合并根链表时,是作为新的子结点child放在最前面
  4. 运行结果

  5. 参考

    1. https://www.cnblogs.com/skywang12345/p/3659060.html

算法导论 斐波那契堆相关推荐

  1. 算法导论--斐波那契堆

    斐波那契堆 斐波那契堆也是数据储存结构的一种,这种数据结构之所以产生,主要有两个优点:1.对于数据合并操作具有很高的效率:2.对于其他一般数据操作平均时间复杂度较好(注意这里是平均复杂度,不是最坏情形 ...

  2. 算法导论读书笔记-第十九章-斐波那契堆

    算法导论第19章--斐波那契堆 可合并(最小)堆(mergeable min-heap) : 支持以下5种操作的一种数据结构, 其中每一个元素都有一个关键字: MAKE-HEAP(): 创建和返回一个 ...

  3. 算法导论之斐波那契堆

    斐波那契堆,和二项堆类似,也是由一组最小堆有序的树构成.注意区别,不是二项树,是有根而无序的树.导论中,斐波那契堆只是具有理论上的意义,是以平摊分析为指导思想来设计的数据结构,主要是渐进时间界比二项堆 ...

  4. 《算法导论3rd第十九章》斐波那契堆

    前言 第六章堆排序使用了普通的二叉堆性质.其基本操作性能相当好,但union性能相当差. 对于一些图算法问题,EXTRACT-MIN 和DELETE操作次数远远小于DECREASE-KEY.因此有了斐 ...

  5. 算法导论 第20章 斐波那契堆

    斐波那契堆的定义 参看19章 二项堆我们可以看到对于可合并堆操作,二项堆均有O(lgn)的时间,对于本章将要讨论的斐波那契堆也支持这些操作,而且它有着更好的渐进时间界,对于不涉及元素删除的操作,它有着 ...

  6. 《算法导论》第19章-斐波那契堆 引入 19.1 斐波那契堆结构

    引入 1.可合并堆 可合并堆(mergeable heap)是支持以下5种操作: MAKE-HEAP():创建和返回一个新的不含任何元素的堆. INSERT(H,x):将一个已填人关键字的元素x插人堆 ...

  7. 斐波那契堆(Fibonacci heaps)

    一:斐波那契堆 1:特性 斐波那契堆同二项堆一样,也是一种可合并堆.斐波那契堆的优势是:不涉及删除元素的操作仅需要O(1)的平摊运行时间(关于平摊分析的知识建议看<算法导论>第17章).和 ...

  8. 优先队列——斐波那契堆(without source code)

    [0]README 0.1) 本文部分内容转自 数据结构与算法分析,旨在理解 斐波那契堆 的基础知识: 0.2) 文本旨在理清 斐波那契堆的 核心idea,还没有写出源代码实现,表遗憾: 0.3)从实 ...

  9. 在计算机科学中算法指的是,算法 - 为什么斐波纳契数在计算机科学中具有重要意义?...

    算法 - 为什么斐波纳契数在计算机科学中具有重要意义? Fibonacci数字已经成为计算机科学学生递归的一个流行的介绍,并且有一个强烈的论据,他们坚持在自然界. 出于这些原因,我们很多人都熟悉它们. ...

  10. boost::graph模块实现斐波那契堆的测试程序

    boost::graph模块实现斐波那契堆的测试程序 实现功能 C++实现代码 实现功能 boost::graph模块实现斐波那契堆的测试程序 C++实现代码 #include <boost/c ...

最新文章

  1. c++ resizereserve
  2. 剑指offer:剪绳子
  3. web项目中用户登录的具体流程
  4. python南开大学王凯_王凯:长大后我也成了你
  5. Flutter实战一Flutter聊天应用(五)
  6. Java学习系列及数据结构博客全目录
  7. linux c 数组拷贝,C++对数组进行复制 - osc_8iux0cyz的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 【活字格案例】综合报表信息管理系统搭建
  9. 4.正则匹配与re模块
  10. EAUML日拱一卒-活动图::14.2 Behavior StateMachines (6) - Transitions
  11. 使用RNN预测各个国家的人均GDP
  12. 软件测试体系学习及构建(1)-软件测试环境介绍
  13. unity游戏破解 修改粒子材质
  14. 学无止境中的曙光----维伯英语
  15. 树莓派基础实验14:PS2操纵杆实验
  16. IMEI/MEID校验位计算
  17. 数据库系统概论第五版-重点知识点思维导图
  18. arduino教程-07.舵机
  19. PHP实现同一个账号只能在一个终端登陆
  20. oracle去重差个数,多表查询 - Oracle 查询技巧与优化_数据库技术_Linux公社-Linux系统门户网站...

热门文章

  1. Linux系统分区概念
  2. opendir readdir
  3. 智慧景区项目建设方案之(票务管理详细介绍)
  4. lnmp一键安装包 mysql_lnmp一键安装包搭建lnmp环境
  5. 剪映怎么把无字幕的英文视频翻译成制作成中文字幕?(附教程+剪映字幕翻译工具免费下载)...
  6. Xilinx FPGA PTP IEEE1588使用
  7. java-设置电脑音量
  8. 解决pgadmin4导入导出数据时报错 Utility file not found. Please correct the Binary Path in the Preferences dialog
  9. Java二叉树的最大深度
  10. Clover 驱动文件夹_使用Clover安装macOS入门指南