heapq 最小堆
heapq.heapify()将列表原地转换为堆。
sort()区别在于heap采用的是堆排序算法,sort采用的是归并排序算法。
堆(heap)是一个树形数据结构,其中子节点与父节点是一种有序关系。
二叉堆(Binary heap)可以使用以如下方式组织的列表或数组表示,即元素N的子元素位于2*N+1和2*N+2(索引从0开始)。这种布局允许原地重新组织堆,从而不必在增加或删除元素时分配大量内存。
堆的逻辑结构就是完全二叉树,并且二叉树中父节点的值小于等于该节点的所有子节点的值。这种实现可以使用 heap[k] <= heap[2k+1] 并且 heap[k] <= heap[2k+2] (其中 k 为索引,从 0 开始计数)的形式体现,对于堆来说,最小元素即为根元素 heap[0]。
. heapq.py中提供的函数方法
heapq.heappush(heap, item)
heapq.heappop(heap):返回 root 节点,即 heap 中最小的元素。
heapq.heapreplace(heap,item): python3中heappushpop的更高效版。
heapq.heappushpop(heap, item):向 heap 中加入 item 元素,并返回 heap 中最小元素。
heapq.heapify(x):Transform list into a heap, in-place, in O(len(x)) time
heapq.merge(*iterables, key=None, reverse=False)
heapq.nlargest(n, iterable, key=None):返回可枚举对象中的 n 个最大值,并返回一个结果集 list,key 为对该结果集的操作。
heapq.nsmallest(n, iterable, key=None):同上相反
heapq._heappop_max(heap): Maxheap version of a heappop
heapq._heapreplace_max(heap,item):Maxheap version of a heappop followed by a heappush.
heapq._heapify_max(x):Transform list into a maxheap, in-place, in O(len(x)) time
heapq._siftdown(heap,startpos,pos): Follow the path to the root, moving parents down until finding a place
heapq._siftup(heap,pos):Bubble up the smaller child until hitting a leaf
heapq._siftdown_max(heap,startpos,pos):Maxheap variant of _siftdown
heapq._siftup_max(heap,pos):Maxheap variant of _siftup