Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

혼합 가능한 우선순위 큐(Meldable Priority Queue)와 스큐 힙(Skew Heap) 완벽 이해

혼합 가능한 우선순위 큐(Meldable Priority Queue)

정의

랜덤화 혼합 힙(Randomized Meldable Heap, 또는 Randomized Meldable Priority Queue)은 내부 구조가 힙 순서(heap-order)를 따르는 이진 트리로 구성된 우선순위 큐 기반 자료구조입니다. 다만 일반적인 힙과 달리, 기반이 되는 이진 트리의 모양(shape)에 대한 엄격한 제약 조건은 존재하지 않는다는 점이 특징입니다.

주요 장점

랜덤화 혼합 힙은 유사한 다른 자료구조에 비해 여러 가지 실질적인 이점을 제공합니다.

  • 다른 우선순위 큐 자료구조보다 더 단순한 접근 방식을 제공하여 구현과 이해가 쉽습니다.
  • 모든 연산이 적용하기 간편하며, 시간 복잡도 상수(constant factor)가 작아 실제 성능이 좋습니다.
  • 트리의 균형(balance) 조건을 유지할 필요가 없고, 노드 내부에 위성 정보(satellite information)를 저장하지 않아도 됩니다.
  • 최악의 경우에도 우수한 시간 효율성을 보입니다. 대부분의 경우 각 연산의 실행 시간은 높은 확률로 로그 시간(logarithmic time) 안에 완료됩니다.

스큐 힙(Skew Heap)

스큐 힙(skew heap, 또는 자기 조절 힙(self-adjusting heap))은 이진 트리 형태로 구현되는 힙 자료구조입니다.

스큐 힙의 가장 큰 장점은 일반적인 이진 힙(binary heap)보다 병합(merge) 연산을 훨씬 빠르게 수행할 수 있다는 점입니다.

이진 힙과 달리 구조적 제약(structural constraints)이 없기 때문에, 트리의 높이가 반드시 로그 스케일을 유지한다는 보장은 없습니다. 대신 다음 두 가지 조건만 만족하면 됩니다.

  • 일반적인 힙 순서(heap order)만 유지하면 됩니다. 즉, 루트가 최솟값이어야 하며, 이 규칙이 모든 서브트리에 재귀적으로 적용됩니다. 단, 마지막 레벨을 제외한 모든 레벨이 꽉 차 있어야 한다는 균형 속성(balanced property)은 요구되지 않습니다.
  • 스큐 힙의 핵심 연산은 오직 병합(Merge) 하나뿐입니다. 삽입(insert), 최솟값 추출(extractMin()) 등 나머지 연산들은 모두 병합 연산만으로 구현할 수 있습니다.

예제

첫 번째 스큐 힙이 다음과 같다고 가정해 보겠습니다.

혼합 가능한 우선순위 큐(Meldable Priority Queue)와 스큐 힙(Skew Heap) 완벽 이해

두 번째 힙은 아래와 같습니다.

혼합 가능한 우선순위 큐(Meldable Priority Queue)와 스큐 힙(Skew Heap) 완벽 이해

두 힙을 병합하면 최종적으로 다음과 같은 형태의 트리를 얻게 됩니다.

혼합 가능한 우선순위 큐(Meldable Priority Queue)와 스큐 힙(Skew Heap) 완벽 이해

재귀적 병합 과정(Recursive Merge Process)

merge(a1, a2)
a1과 a2를 병합할 두 개의 최소 스큐 힙(min skew heap)이라 하자.
a1의 루트가 a2의 루트보다 작다고 가정한다.
(그렇지 않다면 두 힙을 서로 교환(swap)하면 동일한 상황을 만들 수 있다.)

1. a1->left와 a1->right를 서로 교환한다.
2. a1->left = merge(a2, a1->left)