堆相当于完全二叉树的数组对象
堆中的某个节点的值总是不大于或小于其父节点的值
堆总是完全二叉树
对于Python存在堆模块
heapq
看一下常见方法
首先是heapify 建立堆的方法
heapq.heapify(x),在线性时间内将列表原地转换为堆
要注意没有返回值,这是原地进行的
所以不要写成 xxx = heapq.heapify(x) 不要这么做
建立堆还有一个方法 heapq.heappush(heap,item)
这个方法是将item元素加入heap堆中,有点像是append
接下来是heapq.heappop(heap)
建立了堆就要对堆进行操作,这个方法是“弹出”堆中最小元素,保持堆不变,如果堆为空,那么会报错
注意是弹出,如果想要得到最小元素应该使用heap[0],使用索引得到相应元素
然后是下一个heapq.heappushpop(heap, item)
这是一个push和pop的结合,heap为堆,item为人堆元素,函数结果是弹出最小值
heapq.heapreplace(heap, item) 弹出并从堆中返回最小的项,然后推送新项。堆大小不变。如果堆为空,报错
注意和上面的pushpop的区别,pushpop是先入堆,然后弹出最小值,而replace是先弹出最小值,然后入堆
然后是比较难理解的heapq.。merge(*iterables)
将多个排序的输入返回成一个排序的输出,返回排序后值的迭代器
注意返回的是迭代器,
最后是heapq.nlargest(n,iterables)和heapq.nsmallest(n,iterables)
参数都是数量n和可迭代对象
分别返回对应n数量的最大值和最小值
完成了堆模块的基本学习