前言
Python 堆队列算法.
Operating System: Ubuntu 22.04.4 LTS
参考文档
介绍
heapq
是 Python 标准库中的一个模块,它提供了堆队列算法的实现,也称为优先队列算法。在 Python 中,heapq
实现的是最小堆。以下是 heapq
模块的一些基本操作和函数:
基本属性
- 堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。
- Python 中的
heapq
模块实现的是最小堆,因此堆顶总是最小元素。
基本操作
- 要使用
heapq
,首先需要将列表转换成一个堆。 heapq
模块的操作都是基于列表的,所以可以直接在列表上操作。
常用函数
heapq.heappush(heap, item)
:将item
添加到heap
中,保持堆的不变性。heapq.heappop(heap)
:弹出并返回heap
的最小元素,保持堆的不变性。如果堆为空,则引发IndexError
。heapq.heappushpop(heap, item)
:将item
放入堆中,然后弹出并返回堆的最小元素。这个操作比先调用heappush()
然后调用heappop()
要更高效。heapq.heapify(x)
:将列表x
转换成堆,原地排序,时间复杂度为 O(n)。heapq.heapreplace(heap, item)
:弹出并返回堆的最小元素,并将item
放入堆中。这个操作比heappop()
然后调用heappush()
更高效。heapq.merge(*iterables, key=None, reverse=False)
:将多个排序后的输入合并成一个排序后的序列,返回迭代器。heapq.nlargest(n, iterable, key=None)
:从iterable
中找出最大的n
个元素。heapq.nsmallest(n, iterable, key=None)
:从iterable
中找出最小的n
个元素。
示例
以下是如何使用 heapq
的一个简单例子:
import heapq
# 创建一个列表
nums = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
# 将列表转换成堆
heapq.heapify(nums)
# 弹出堆中最小的元素
print(heapq.heappop(nums)) # 输出: 0
# 向堆中添加一个新元素
heapq.heappush(nums, 1.5)
# 弹出堆中最小的元素
print(heapq.heappop(nums)) # 输出: 1
# 找出列表中最大的3个元素
largest = heapq.nlargest(3, nums)
print(largest) # 输出: [9, 8, 7]
# 找出列表中最小的3个元素
smallest = heapq.nsmallest(3, nums)
print(smallest) # 输出: [2, 3, 4]
在使用 heapq
时,需要注意堆是一个最小堆,并且 heapq
模块的操作都是基于列表的,所以直接在列表上操作即可。
结语
第二百五十九篇博文写完,开心!!!!
今天,也是充满希望的一天。