关于堆的一点总结
2017-07-01 23:22
190 查看
一、什么是堆
堆是一颗被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。
二、堆的特性
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
堆是一颗被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。
二、堆的特性
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
相关文章推荐
- java和struts使用中的一点总结--关于写在页面上的select域的选项选中后保存状态的办法!
- 关于在applet中使用JDBC访问数据库的一点总结
- 关于JAVA集合类的一点总结!
- 关于存储过程编写的一点总结(转)
- 关于SYS_CONNECT_BY_PATH 的一点总结
- 关于用CSplitterWnd分割View的一点总结
- 关于如何jar的一点总结 (转自:javaresearch yedongshu2001 原创)
- 关于.net中修饰符的一点总结
- 关于DNN Module开发学习以来的一点总结
- 关于用CSplitterWnd分割View的一点总结
- 关于PHP的i18n(国际化)的一点总结(1)----gettext部分
- 关于java.io的一点总结
- vs2005中关于masterpage,Theme,skin的一点总结
- 关于网站开发文件编码的一点总结[转]
- 关于学习CCNA的一点经验总结
- 关于WebForm的编辑列ItemTemplate和EditItemTemplate的一点小总结
- 今天工作中关于下拉框的一点总结
- 关于连接池写法的一点总结(一)
- 关于如何jar的一点总结
- 关于DNN Module开发学习以来的一点总结