c语言编程笔录

首页 >   > 笔记大全

笔记大全

python内置堆怎么实现

更新时间:2023-11-28

Python内置堆基本概念

Python内置堆(Heap)是一个基于数组(Array)的完全二叉树结构,它是一种非常有用的数据结构,常用于排序算法、优先级队列、实现Dijkstra算法等。

Python中,Heap从collections模块中导入,它有两种形式:最小堆和最大堆。最小堆保证每个节点的元素值都不大于其子节点的元素值,而最大堆保证每个节点的元素值不小于其子节点的元素值。

from collections import heap
min_heap = []
max_heap = []
heap.heapify(min_heap) # 初始化最小堆
heap.heapify(max_heap) # 初始化最大堆

Python内置堆主要方法

Python内置堆提供了如下常用方法:

  • heappush(heap, ele):在堆中插入元素。
  • heappop(heap):从堆中删除并返回最小元素。
  • heappushpop(heap, ele):将元素插入堆中,并删除并返回最小元素。
  • heapreplace(heap, ele):删除并返回堆中最小元素,然后将元素插入堆中。
  • heapify(x):将列表 x 转换为堆,原地,线性时间复杂度。
  • heapq.nlargest(n, iterable, key=None):在数据集中返回前 n 个最大元素。
  • heapq.nsmallest(n, iterable, key=None):在数据集中返回前 n 个最小元素。
from collections import heap
min_heap = []
heap.heappush(min_heap, 5)
heap.heappush(min_heap, 2)
heap.heappush(min_heap, 7)
heap.heappop(min_heap)

Python内置堆的应用

Python内置堆的应用十分广泛,可以用于实现排序算法、实现最小/大值优先级队列、实现Dijkstra算法等。以下是一个实现最小值优先级队列的例子:

import heapq

class PriorityQueue():
  def __init__(self):
    self._queue = []
    self._index = 0
    
  def push(self, item, priority):
    heapq.heappush(self._queue, (priority, self._index, item))
    self._index += 1
      
  def pop(self):
    return heapq.heappop(self._queue)[-1]

总结

Python内置堆是一种十分有用的数据结构,它用于实现排序算法、优先级队列、最短路径算法等。Python内置堆的实现非常简单,使用collections模块中的heap可以创建一个最大/小堆。Python内置堆提供了一系列方法,如插入、删除、获取最小/大元素等。