首页 > 编程语言 > 详细

Python模块:heapq堆

时间:2020-08-30 09:20:14      阅读:70      评论:0      收藏:0      [点我收藏+]

这个模块提供了堆队列算法的实现,也称为优先队列算法

堆是一个二叉树,它的每个父节点的值都只会小于或大于所有孩子节点(的值),他使用了数组来实现。堆最小的元素总是在根节点:heap[0]

 

要创建一个堆,可以使用list来初始化为[],或者你可以通过一个函数heapify(),来把一个list转换成堆

定义了以下函数:

1.heapq.heappush(heap.item)

将item的值加入到heap中,保持堆的不变性

 

2.heapq.heappop(heap)

弹出并返回heap的最小的元素,保持堆的不变性,抛出IndexError,使用heap[0],可以只访问最小的元素而不弹出它。

 

3.heapq.heappushpop(heap, item)

将item放入堆中,然后弹出并返回heap的最小元素,该组合操作比先调用heappush(),在调用heappop()运行起来更有效率

 

4.heapq.heapify(x)

将list x转换成堆,原地,线性时间内

 

5.heapq.heapreplace(heap, item)

弹出并返回heap中最小的一项,同时推入新的item。堆的大小不变。如果堆为空,则引发IndexError。

这个单步骤操作比heappop()加heappush()更高效,并且在使用固定大小的堆时更为适宜.pop/push组合总是会从堆中返回一个元素并将其替换为item。

返回的值可能会比添加的item更大,如果不希望如此,可考虑改用heappushpop(),它的push/pop组合会返回两个值较小的那个,将较大的值留在堆中.

 

6.heapq.nlargest(n, iterable, key = None)

从ierable所定义的数据集中返回前n个最大元素组成的列表,如果提供了key则其指定一个单参数的函数,用于从iterable的每个元素中提取比较键(例如key = str.lower),等价于sorted(iterable, key = key, reverse = True)[:n]

7.heapq.nsmallest(n, iterable, key = None)

后两个函数在n值较小的时候性能最好,对于更大的值,使用sorted()函数会更有效率,此外,当n = 1时,使用内置min()和max()函数会更有效率,如果需要重复使用这些函数,请考虑将可迭代对象转为真正的堆。

 

基本实例:

堆排序可以通过将所有值推入堆中,然后每次弹出一个最小值来实现。

 

Python模块:heapq堆

原文:https://www.cnblogs.com/yunxintryyoubest/p/13584144.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!