Skip to content

문제 2 · 힙 배열의 마지막 원소

문제 2 [2점]

우선순위 큐priority queue를 배열array을 이용한 힙 자료구조를 이용하여 구현하였다고 하자. 이 배열의 첫 번째 원소는 가장 작은 값을 가지는데, 반대로 마지막 원소는 항상 가장 큰 값을 가지는지의 여부(1점)를 이유(1점)와 함께 서술하시오.

풀이 및 해설

여부(1점). 아니오. 마지막 원소가 항상 가장 큰 값을 가지는 것은 아닙니다.

이유(1점). 최소 힙의 성질은 **"모든 부모 ≤ 자식"**이라는 부모-자식 간의 순서만 보장합니다. 형제 사이나 배열 인덱스 순서에 대해서는 아무것도 강제하지 않습니다.

  • 최댓값은 어떤 부모의 자식도 아니어야 하므로 반드시 잎(leaf) 노드 중 하나에 있습니다(잎은 배열의 뒤쪽 절반, 인덱스 >N/2에 위치).
  • 하지만 여러 잎 중 어느 것이 최댓값인지는 정해져 있지 않으며, 배열의 맨 마지막 칸이 반드시 최댓값이라는 보장은 없습니다.

반례. 배열 [1, 5, 3, 8, 6]을 생각합시다. 트리로 보면

        1
       / \
      5   3
     / \
    8   6

부모 ≤ 자식이 모두 성립하는 올바른 최소 힙입니다. 첫 원소는 최솟값 1이지만, 최댓값은 8(인덱스 3)이고 **마지막 원소는 6**입니다. 즉 마지막 원소가 최댓값이 아닙니다.

마지막 원소가 최댓값인 것은 보장되지 않음; 최댓값은 잎 중 하나일 뿐
PDF