다음 문제를 해결하는 동안 혼란스러워했습니다 (질문 1-3).
질문
D -ary 힙 이진 힙 유사하지만 (하나 개의 가능한 제외) 잎 이외의 노드는이 D 자녀 대신 2 명.
배열에서 d- ary 힙을 어떻게 표현 하시겠습니까?
n 및 d 측면에서 n 요소 의 d- ary 힙 높이는 얼마입니까?
d -ary max-heap 에서 EXTRACT-MAX를 효율적으로 구현하십시오 . d 와 n의 관점에서 실행 시간을 분석하십시오 .
d -ary max-heap 에서 INSERT를 효율적으로 구현하십시오 . d 와 n의 관점에서 실행 시간을 분석하십시오 .
INCREASE-KEY ( A , i , k )를 효율적으로 구현하여 k <A [i] = k 인 경우 오류를 표시 한 다음 d- ary 행렬 힙 구조를 적절하게 업데이트합니다 . d 와 n의 관점에서 실행 시간을 분석하십시오 .
내 솔루션
배열
→ 내 표기법이 약간 정교 해 보입니다. 더 간단한 것이 있습니까?
하자 H는 의 높이를 나타내고, D -ary 힙.
이것은 내 구현입니다.
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의 실행 시간 :
→ 이것이 효율적인 솔루션입니까? 아니면 내 솔루션에 문제가 있습니까?
h = (log [nd−1+1])− 1
위의 높이에 대한 설명은 적용되지 않습니다. h = log [nd−1 + 1] −1 = log [nd] -1 = log [n] 그럼에도 불구하고, 트리의 높이는 다음과 같이 기록됩니다.Θ(log(n)).
참고 : 로그는 항상 d-ary 힙의 기본 d에 기록됩니다 .