堆是一个非线树形的数据结构,具有两个堆,最大堆和最小的堆。最小的元素。
最大堆:树中父节点的值总是大于任意节点的值
最小堆:树中父节点的值始终大于任何子公司节点的值
我们通常使用二元桩来获得优先队列。其内部调整算法复杂性是logn
heappush(堆,项目):将项目按入HEQP。
结果:
HEAPPOP(堆):最小值从堆项目中弹出。
结果:
结果:
注意:如果没有将其压碎到堆中,而是通过HEAPQ添加一个值,则堆的功能无法操作元素,或者该元素对Heap.LET的看法很难看。
结果:
可以发现-1不被-1所感知,否则弹出的最小元素应为-1而不是1
HAEPQ.HEAPIFY(列表):必须列出参数。此功能必须将列表变成堆并实时运行。
结果:
处理后,List1已成为堆(最小元素1首先排名)
heappushpop(堆,项目):Heappush方法和Heappop方法的组合,首先是Heatpush(Heap,Item),然后是Heappop(Heap)
首先是Heatpush
结果:
再次出现
结果:
结果:
堆(堆,项目):头部和heappush方法的拟合方法,第一个heappop(heap),然后heappush(heap,item)
注意此方法和HeapPushpop方法之间的区别
第一个船宝
结果:
再次出现
结果:
结果:
合并(*迭代):合并多个堆
结果:
可以看出,此方法将返回可以使用迭代或列表()方法获取其内容的生成器
结果:
HAEPQ.NLARGOGE(n,iToble):获得最大的N值
结果:
这是List1的两个最大数量
HAEPQ.NSMALLEST(n,它可以):获取iterabile中最大的n个值
结果:
这是nlarem方法和nsmallest方法的最小列表1。当发现要找到的元素的数量相对较小时,函数nlargest()和nsmallest()非常合适。如果您只想找到唯一的最小值或最大值或最大(n = 1)元素,则是min()和max()函数将更快。类似,如果N的大小接近收集大小,通常会先对此集进行排序,然后更快地使用切片操作(sorted(items)[:n] [:n]或排序(项目)[-n:])。有必要在正确的场合使用函数nlarges()和nsmallest()来发挥其优势(如果n接近收集大小,则使用排序操作会更好)。