假设我想将一个节点插入二进制堆,我怎样才能找到索引 插入和堆化后堆中的节点? 二进制堆表示为数组。 我需要在O(log(log(n))中找到这个算法。
我知道如何在log n复杂性中找到它,但是没有成功在log log n中找到它。
谢谢大家。
答案 0 :(得分:3)
我们来看看通常如何插入节点。它被附加到数组的末尾,然后它与它的父项交换,直到它到达根或变得大于或等于它的父(我假设我们有一个最小堆)。这就是为什么我们必须在从它到根的路径中找到这个元素的位置。但是这个路径是排序的(由于堆的属性)。这就是为什么我们可以使用二分搜索来找到它在这条路径中的位置。路径的长度为O(log n)
,因此二进制搜索适用于O(log(log n))
。