解决以下问题时我感到困惑(问题1-3)。
题
甲d进制堆就像是一个二进制堆,但(带有一个可能的例外)非叶节点具有d孩子而2个孩子。
您将如何在数组中表示d -ary堆?
n个元素的d元堆的高度分别是n和d?
在d -max-heap中给出EXTRACT-MAX的有效实现。根据d和n分析其运行时间。
在d-最大堆中给出INSERT的有效实现。根据d和n分析其运行时间。
给出INCREASE-KEY(A,i,k)的有效实现,如果k <A [i] = k,则标记一个错误,然后适当地更新d -ary矩阵堆结构。根据d和n分析其运行时间。
我的解决方案
给一个数组
→ 我的表示法似乎有点复杂。还有其他更简单的方法吗?
令h表示d -ary堆的高度。
假设堆是完整的d元树
这是我的实现:
EXTRACT-MAX(A) 1 if A.heapsize < 1 2 error "heap underflow" 3 max = A[1] 4 A[1] = A[A.heapsize] 5 A.heap-size = A.heap-size - 1 6 MAX-HEAPIFY(A, 1) 7 return max MAX-HEAPIFY(A, i) 1 assign depthk-children to AUX[1..d] 2 for k=1 to d 3 compare A[i] with AUX[k] 4 if A[i] <= AUX[k] 5 exchange A[i] with AUX[k] 6 k = largest 7 assign AUX[1..d] back to A[depthk-children] 8 if largest != i 9 MAX-HEAPIFY(A, (2+(1+d+d^2+..+d^{k-1})+(largest-1) )
MAX-HEAPIFY的运行时间:
其中 Ç 我表示的成本我上述第线。
EXTRACT-MAX:
→ 这是有效的解决方案吗?还是我的解决方案有问题?
h = (log [nd−1+1])− 1
因此不是“ -1”,因此我们上面对高度的解释将不成立。h = log [nd-1 + 1] -1 = log [nd] -1 = log [n]尽管如此,树的高度写为Θ(log(n)).
注意:对于dary堆,log始终以基d为单位。