关于堆的一点总结
来源:互联网 发布:linux查看电池电量 编辑:程序博客网 时间:2024/06/15 04:51
一、什么是堆
堆是一颗被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。
二、堆的特性
1、如果一个堆有N个节点,那么堆的高度为 h = [lgN] 。即N 在 2h 到 2h+1-1 之间。
2、父节点的值大于(大顶堆)或小于(小顶堆)子节点的值。
三、堆支持的操作
1、上浮 shiftup
2、下沉 shiftdown
3、插入 push
4、弹出 pop
5、取顶 top
其中,当前元素若可能与下一层元素交换,就是siftdown;若可能与上一层元素交换,就是siftup。或者说当前元素被“挖出”后形成的“坑”,若往上升就是siftup,若往下降就是siftdown。当你插入了某个节点或弹出了节点时,为了恢复堆的性质,就可能要执行这两种操作。
四、堆的表示
堆可以用数组来表示。若从下标0开始存放元素的话,那么对于数组任一位置 i上的元素,其左儿子在位置2i+1上,右儿子在2i+2上,它的父亲则在[(i-1)/2]上。
对于一个数组a,可以通过这种方式把它转换为堆:就是对下标为[a.length/2]-1一直到0为止 的位置(实际上也就是成为父节点的位置)执行上面所说的“下沉” 操作。
参考:
1、http://www.cnblogs.com/JVxie/p/4859889.html
2、http://blog.csdn.net/ditian1027/article/details/19987239
3、http://blog.csdn.net/zhutulang/article/details/7746033
阅读全文
0 0
- 关于堆的一点总结
- 关于堆排序的一点总结
- 关于堆和栈的一点知识
- 关于多线程的一点总结
- 关于SYS_CONNECT_BY_PATH 的一点总结
- 关于数据库的一点总结
- 关于反编译的一点总结
- 关于dijkstra的一点总结
- 关于floyd的一点 总结
- 关于ActiveMQ的一点总结
- 关于线程的一点总结
- 关于DM的一点总结
- 关于NSSet的一点总结
- 关于NorFlash的一点总结
- 关于ActiveMQ的一点总结
- 关于js的一点总结
- 关于图的一点总结
- 关于动画的一点总结
- Qt中关于简单音频的使用(系列三)
- Mysql SQL优化方法
- Mac环境下AS配置Git
- 【GamePlay3D游戏引擎学习笔记】——Game class
- ECMAScript6十大新特性
- 关于堆的一点总结
- JAVA 多线程同步工具类总结
- 4. 树--树的表示
- 分割矩形
- win10下安装ubantu16.04LTS注意事项
- sql server 设计表,无法保存
- Git 入门
- 遵循亚马逊标准!Kindle 电子书专业制作教程
- 《计算机中可编程内存分析》