Skip to content

문제 3 · d-힙의 부모·자식 인덱스

문제 3 [2점]

d-힙d-heap에서, 루트root, 리프leaf 노드가 아닌 i번째 노드의 부모parent 인덱스와 자식child 인덱스는 어떻게 정의되는지 서술(각 1점)하시오.

풀이 및 해설

d-힙은 각 노드가 최대 d개의 자식을 갖는 완전 d-진 트리를 배열에 저장한 것이다. 인덱스를 1부터 시작한다고 하면(루트가 1번), i번 노드에 대해 다음이 성립한다.

부모 인덱스

parent(i)=i1d=i2d+1

자식 인덱스

i번 노드의 d개 자식은 연속한 칸을 차지한다.

children(i)=d(i1)+2, d(i1)+3, , d(i1)+d+1=di+1

즉 첫째 자식은 d(i1)+2, 마지막 자식은 di+1 이다.

검산(d=2, 즉 이진 힙)

  • 자식: 2(i1)+2=2i2i+1 → 익숙한 좌·우 자식 공식과 일치.
  • 부모: (i2)/2+1. 예를 들어 i=5 이면 3/2+1=2, i=4 이면 2/2+1=2 → 4·5번의 부모가 2번으로 맞다.

(만약 0-기반 인덱스를 쓴다면 parent(i)=(i1)/d, children(i)=di+1,,di+d 가 된다.)

PDF