Tarjan 的“数据结构和网络算法”在最左边的堆中声明 heapify 函数如下:
heap function heapify (list q);
do |q| ≥ 2 → := q[3..] & meld (q(1), q(2)) od;
return if q = [ ] → null | q != [ ] → q(1) fi
end heapify;
q
是我们想一起堆的堆队列。meld(h1, h2)
是一个合并两个堆并恢复堆属性的函数。meld(h1, h2)
具有复杂性O(logn),其中n是两个堆中的节点总数。这使得一次通过队列的复杂性如下:
这是合理的。我没有得到的是整个 heapify 的时间:
k
这是原始堆n
的数量和它们包含的项目总数。前面还提到了两个约束:
有人可以帮我理解 Eq. 2是派生的?(如何解释等式 2 中等式的左表达式)