插入后查找二进制堆节点的位置

时间:2015-01-01 13:31:15

标签: algorithm data-structures priority-queue binary-heap

假设我想将一个节点插入二进制堆,我怎样才能找到索引 插入和堆化后堆中的节点? 二进制堆表示为数组。 我需要在O(log(log(n))中找到这个算法。

我知道如何在log n复杂性中找到它,但是没有成功在log log n中找到它。

谢谢大家。

1 个答案:

答案 0 :(得分:3)

我们来看看通常如何插入节点。它被附加到数组的末尾,然后它与它的父项交换,直到它到达根或变得大于或等于它的父(我假设我们有一个最小堆)。这就是为什么我们必须在从它到根的路径中找到这个元素的位置。但是这个路径是排序的(由于堆的属性)。这就是为什么我们可以使用二分搜索来找到它在这条路径中的位置。路径的长度为O(log n),因此二进制搜索适用于O(log(log n))