00259 Python 堆队列算法


前言

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 模块的操作都是基于列表的,所以直接在列表上操作即可。

结语

第二百五十九篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录