12.1 堆:html
最小堆(minheap) : 每一结点小于或等于其两个孩子;其根的两个孩子一样为最小堆。
git
最大堆(maxheap) : 每一结点大于或等于其两个孩子;其根的两个孩子一样为最大堆。
数组
元素相同,构造的堆也能够不一样:
数据结构
操做 | 说明 |
---|---|
addElement | 将给定元素添加到该堆中 |
removeMin | 删除堆的最小元素 |
findMin | 返回一个指向堆中最小元素的引用 |
重构堆。
学习
堆的根处存储的是堆中的最小元素,所以只需返回其便可。.net
优先级队列(priority queue) 和一般的栈和队列同样,但里面的每个元素都有一个优先级 ,在处理的时候,首先处理优先级最高的。若是两个元素具备相同的优先级,则按照他们插入到队列中的前后顺序处理。设计
虽然堆并不是一个队列,但其提供了一个高效 的优先级队列实现。3d
为能向上遍历树,每一个结点存储了指向双亲的指针。指针
时间复杂度O(log n)调试
12.3.2 removeMin操做:
12.3.3 findMin操做:
时间复杂度为O(1)
12.4 使用数组实现堆
右孩子位于2(n+1)处
时间复杂度O(log n)
12.4.2 removeMin操做:
12.4.3 findMin操做:
时间复杂度为O(1)
12.5 使用堆:堆排序
一次删除一个元素
时间复杂度为O(n log n)
问题1:如何删除某一指定结点的子树。
解决:
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 3000行 | 15篇 | 300小时 |
第一周 | 0/0 | 1/1 | 12/12 |
第二周 | 935/935 | 1/2 | 24/36 |
第三周 | 849/1784 | 1/3 | 34/70 |
第四周 | 3600/5384 | 1/5 | 50/120 |
第五周 | 2254/7638 | 1/7 | 50/170 |
第六周 | 2809/10447 | 1/9 | 45/215 |
第七周 | 3700/14147 | 1/10 | 40/255 |
第八周 | 3422/17569 | 1/11 | 36/291 |