자료 구조와 알고리즘
부모의 값이 자식의 값 이상이 되는 최대 힙을, 루트를 a[0]으로 하는 배열로 나타내고 있다. 힙 50, 30, 40, 10, 20, 35에 45를 추가한다. 맨 끝에 놓은 뒤 부모보다 큰 동안은 부모와 교환하는 조작을 수행한 후의 배열은?
- A50, 30, 40, 10, 20, 35, 45
- B45, 30, 50, 10, 20, 35, 40
- C50, 30, 45, 10, 20, 35, 40
정답과 해설 보기
정답: C. 50, 30, 45, 10, 20, 35, 40
45는 a[6]에 놓이며, 부모는 a[(6−1)÷2] = a[2] = 40입니다. 45 > 40이므로 교환하여 a[2]로 옮겨 갑니다. 다음 부모 a[0] = 50은 45보다 크므로 여기서 멈추고, 50, 30, 45, 10, 20, 35, 40이 됩니다. 교환은 트리의 높이만큼만 일어나므로 추가는 O(log n)이고, 최댓값 꺼내기도 마찬가지로 O(log n)입니다. 이 성질 때문에 이진 힙은 우선순위 큐의 구현에 자주 쓰입니다.