最小堆(小根堆)
来源:互联网 发布:ip地址显示在阿里云 编辑:程序博客网 时间:2024/05/16 00:34
最小堆定义:
完全二叉树,且其任意节点键值小于其左子树所有节点和右子树所有节点。堆顶总是保存堆的最小值。
堆的表示:
堆是完全二叉树,所以可以用数组表示堆。设数组heap[n]为堆,heap[1]表示根节点,对于除根节点外的任意节点heap[i],其父节点为heap[i/2],其左儿子为heap[i*2],右儿子为heap[i*2+1]。
堆的操作:
heapify(heap,i):若节点heap[i]左子树和右子树都满足最小堆的性质,而heap[i]节点不满足最小堆性质,即heap[i]>heap[i*2]或者heap[i]>heap[2*i+1],则操作heapify(heap,i)调整heap[i]的位置来保持堆的性质。这是堆的基本操作。
heapinsert(heap,val):往堆里面插入值val,新增节点heap[n+1]=val,并比较新增节点和其父节点大小,不断调整新增节点的位置,保持最小堆的性质。
heappop(heap):弹出堆顶元素,并令heap[0]=heap[n],堆大小减一,之后执行heapify(heap,0)来维持堆的性质。
堆排序和优先队列:
由上述堆的基本操作基本可以实现堆排序和优先队列。
堆排序:1,在线算法,不断heapinsert接受所有的数据后,heappop输出所有数据
2,离线算法,利用heapify操作创建最小堆,heappop输出所有数据
优先队列:heapinsert插入优先队列,heappop弹出优先队列
- 最小堆(小根堆)
- 堆排序(最小堆)
- 最大堆/最小堆【大根堆/小根堆】
- 最大堆最小堆(自定义类型)
- 堆排序(最小堆)--【算法导论】
- java 堆排序代码(最小堆)
- 手工实现堆(最小堆)
- poj1442(最大最小堆)
- 优先队列(最小堆)
- 见微知著----POJ2051(最小堆)
- 堆树(最大堆、最小堆)详解
- 最小堆
- 最小堆
- 最小堆
- 最小堆
- 最小堆
- 最小堆
- 最小堆
- ICE使用笔记---对线程池模式的浅析
- How to Install /uninstall VMPlayer under RedHat 6.0
- Python的一些内建函数1
- 对象复制与单例
- 路径下文件遍历
- 最小堆(小根堆)
- Android手机分辨率基础知识(DPI,DIP计算)
- 进程切换时机
- 【算法题】打印二元查找树中元素和等于指定数的所有路径
- 一个C语言程序说明了实参到形参的传递过程(2)
- 坑爹的 wyArray
- HttpServletResponse应用
- 什么是汉明窗?加Hanmming窗的作用?
- java面试题经典20例【第二季_常瑞鹏】