堆及其操作

原创 2016年08月30日 20:04:03

大作业,小作业,插队
有时确实需要插队才可以。

堆,Heap, 正是考虑了适合于特权需求的数据结构。因此,堆也被称作”优先队列”
在C++中有成型的优先队列的数据结构可供调用。

本篇主讲里面的一些算法的有趣操作。

最小堆:任何一个结点的值小于或等于其子节点的值。兄弟结点之间不存在特定的约束关系。小心的是,这里其实也是递归性质。每一棵子树也是堆结构。

最大堆,vice versa.

用途:大键值优先用大顶堆,反之,小键值小顶堆。
完全二叉树。

最大堆的插入:先按照完全二叉树的插入规定次序,增加一个位置,然后,从新增结点的父结点开始,用要插入的元素向下过滤上层结点。,新建个空位置,但我这个新人不一定就坐在这里,向上逐个比较,拉上级下马,自己上位。由于是把上级往下拖,所以叫作向下过滤
再掰开来说就是,父亲需要比儿子,孙子都要大。那么要插入的元素,首先是从基层做起,但是它的能力很强,所以先和上级比比,如果比上级小,老老实实待着,如果比自己的上级大了,那么,对不起,请上级下方到自己的位子,我要当领导。OK,现在踏出第一步了,但并不是结束,外面的世界还很大,需要再往上走走,直到最高级–根为止。

完全二叉树的插入规定次序:指的是在树的最右下方加入结点。

最大堆的删除(首长下台,却拆迁底层百姓的房子):在树中,要取出根节点的元素,即最大值。同时,要删除堆中的一个结点。现在完全二叉树中的最后一个结点家都要被拆了,它怎么办?虽然总书记的位置已经空了,但是它又不能一跃成为一号人物。
于是,这个家已经没了的无业游民以钦察大臣的身份从根开始,与根的两个儿子比较,若是大于这两个儿子,根据堆的性质,此人果然能耐不小,属于大隐隐于市的人物,因为拆迁逼出来了,那么给你做一号人物。若是,比不过这两个儿子,只好选一个牛的继位(儿子中选择一个做首长),你再往下找找。如此循环,直到大于两个儿子的情况出现。则这个无家的结点就有了安排。且因它,让结点有了向上前进的机会,于是,称其为:从根结点开始,用最大堆的最后一个元素向上过滤下层结点。

简单总结,优先队列中的结点插入和删除,是一种可以映射到现实生活中的有趣算法。
首先看插入,就是一个新人的奋斗史,从底层开始往上奋斗,能力有多大,位置就可以做到多高。这是一个公平的社会该给人的进步阶梯。
删除呢,讲的是最高领袖退位,谁来继承的故事。假设最高位的结点(根),我们想删除这个元素值。考虑一个萝卜一个坑的原则,删掉一个元素,也需要删掉一个坑,要是直接删掉最高王座,那整个架构都乱了,所以拆掉了最底层的那个坑。
但是,这也是一个机会,一个重新洗牌的机会。被拆了无家可归了的这个节点,变身为一个钦察大使,开始从最高王位向下找自己的家,在此过程中,它也帮助筛选出来谁是王位的继承人,然后是诸侯的继承人等等。

希望以上的两个过程解析,能够帮助你理解优先队列的操作。
单纯的枯燥的思考,很难觉得这是一个有趣的过程。
以上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

二项堆的基本操作实现

  • 2015年04月08日 10:26
  • 3KB
  • 下载

我写的c++堆操作模板

  • 2015年01月23日 19:34
  • 6KB
  • 下载

最大堆的插入/删除/调整/排序操作

转自:http://www.java3z.com/cwbwebhome/article/article1/1362.html?id=4745 堆有最大堆和最小堆之分,最大堆就是每个结点的值都>=其左...

栈的操作,堆和栈的区别

  • 2008年12月03日 00:10
  • 10KB
  • 下载

java 堆 栈 方法区 数据存放 操作流程

栈:  1 基础数据类型 byte short int long float double char boolean  2 方法的形式参数,方法调用完后从栈空间回收  3 引用对象的地址,引用完后,...

最小堆的实现和操作

  • 2016年12月03日 19:47
  • 5KB
  • 下载

串的堆分配存储表示以及相关操作 C语言版

/***********************************************/ /* 该算法虽然是使用动态内存分配的方法实现 但因其存储单元的地址是连续的 所以本质上还是...

最大堆的构建以及删除操作

  • 2015年12月03日 16:53
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:堆及其操作
举报原因:
原因补充:

(最多只允许输入30个字)