【发布时间】:2015-05-17 09:22:01
【问题描述】:
我正在处理来自 Practice Data Structures Final的练习题
问题
当使用保持为最小堆的数据结构数组时,找出最坏情况的渐近运行时。
我最初的想法是删除操作是O(log n),因为删除的算法是
- 用结束元素交换开始元素。设置结束元素为空
- 减小大小
- 沿着树向下渗透新根
- 返回原始开始元素
步骤 1、2 和 4 都应该是常数时间。第 3 步应该在 O(log n) 中运行,因为完整树的高度是 log n。所以总的来说,删除的运行时间不应该是 O(log n)
但是,如果您查看答案键(来自链接),当使用保持组织为最小堆的数组时,删除的最坏情况渐近运行时间是 O(n)。有人可以解释为什么会这样吗?
【问题讨论】:
-
delete是指删除min还是在堆中查找并删除some元素?
-
但是有了堆,你不应该只能删除最小值吗?这不是重点吗?
-
以
LinkedList为例。它既是List,又是Queue。这完全取决于您的 ADT 提供的 API。您的堆可能会在其他地方用作袋子或集合。 -
@Anonymous 但是删除本身会是 O(log n)?
-
这是我对数组保持组织为最小堆的解释,是的。
标签: java arrays algorithm heap binary-heap