【问题标题】:Time complexity of the Heap pop operation堆弹出操作的时间复杂度
【发布时间】:2018-09-28 13:55:17
【问题描述】:

一直以来,我一直假设一个Heap上的pop操作的时间复杂度是O(1)。

是O(1) 还是O(log(n))?

【问题讨论】:

标签: data-structures time-complexity heap


【解决方案1】:

好的O(1) 仅用于检索堆的根。要删除此根,所有堆实现都具有O(log(n)) 时间复杂度。例如,python heapq 模块实现了一个带有数组的堆,并且数组的第一个元素始终是堆的根。所以在删除根的时候,有一个从根到堆底的替换过程,耗时O(log(n)),O(log(n))是替换的总次数。

【讨论】:

  • 您应该区分 堆,它是一个 抽象数据结构,和“二叉堆”,它是最简单的变体经常在数据结构课程中教授。
  • @meowgoesthedog 术语“抽象数据结构”听起来很混乱;堆是一种种的数据结构(通常理解为二进制堆,是一种数据结构),它实现的抽象数据类型称为优先级队列。
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2012-03-17
  • 2011-11-13
  • 2021-05-04
  • 2017-08-10
  • 1970-01-01
相关资源
最近更新 更多