algorithm - 从二叉堆中删除叶子的时间复杂度

标签 algorithm data-structures time-complexity binary-heap

从堆中删除叶节点的时间复杂度是多少?

我想如果你不知道节点在哪里,它会是 log n,因为你必须找到它。

但是如果您已经知道节点在哪里,它应该是 O(1) 对吗?既然您可以将其删除,而不必重新堆放所有内容?

最佳答案

请记住,二叉堆必须是完整的二叉树,因此如果您删除了最后一片叶子以外的一片叶子,您将需要移动一些东西来取代它的位置。一种方法是将它与最后一个叶子交换,删除最后一个叶子,然后执行冒泡步骤以确保堆属性仍然有效。除去实际定位要移除的叶节点的时间,这需要时间 O(log n)。

希望这对您有所帮助!

关于algorithm - 从二叉堆中删除叶子的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015295/

相关文章:

python - FFT算法错误

c - 在c中使用struct访问多个堆栈

algorithm - 最宽路径挑战 - 在最大生成树中查找路径的最有效方法

performance - 用于查找频繁出现的元素的随机算法的时间复杂度?

performance - 给定二维平面上的 n 个点,找到位于同一条直线上的最大点数

algorithm - 有什么方法可以预测搜索空间中的局部最优值吗?

algorithm - 非常奇怪数据通道的纠错算法

algorithm - 使用伴随矩阵求根

mysql - SQL 选项存储和引用

java - 如果有强大的测试用例,这个问题的解决方案是什么?