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

대칭 최소-최대 힙(SMMH)의 개념, 핵심 성질과 연산 총정리

대칭 최소-최대 힙(SMMH)이란?

대칭 최소-최대 힙(Symmetric Min-Max Heap, SMMH)은 루트를 제외한 모든 노드가 정확히 하나의 원소를 갖는 완전 이진 트리(complete binary tree)로 정의되는 자료구조입니다. 루트 노드는 항상 비어 있으며, 전체 노드 수는 m + 1개입니다. 여기서 m은 힙에 저장된 원소의 개수입니다.

SMMH는 하나의 트리 안에서 최솟값과 최댓값을 동시에 효율적으로 관리할 수 있도록 설계된 양방향 우선순위 큐(double-ended priority queue)용 자료구조입니다.

SMMH의 핵심 성질

SMMH의 임의의 노드를 y, 그리고 y를 루트로 하는 서브트리에 속한 원소들 중 y 자신의 원소(있는 경우)를 제외한 집합을 elements(y)라고 합시다. elements(y)가 공집합이 아닐 때, 모든 노드 y는 다음 두 가지 성질을 만족해야 합니다.

  • y의 왼쪽 자식은 elements(y)의 최솟값을 가진다.
  • y의 오른쪽 자식(존재하는 경우)은 elements(y)의 최댓값을 가진다.

예시로 확인하기

그림 1은 12개의 원소를 가진 SMMH의 예입니다. 값 81을 가진 노드를 y라고 하면, elements(y) = {6, 7, 15, 31, 41}이 됩니다. 이때 y의 왼쪽 자식은 이 집합의 최솟값인 6을, 오른쪽 자식은 최댓값인 41을 담고 있습니다. 실제로 이 트리의 모든 노드가 앞서 설명한 두 성질을 만족함을 검증할 수 있습니다.

대칭 최소-최대 힙(SMMH)의 개념, 핵심 성질과 연산 총정리

배열 기반 구현과 상수 시간 조회

SMMH는 완전 이진 트리이므로, 완전 이진 트리를 배열에 매핑하는 표준 방식을 적용한 암시적 자료구조(implicit data structure) 형태로 저장합니다. 포인터 없이 배열 인덱스만으로 부모·자식 관계를 계산할 수 있어 메모리 효율성이 뛰어나다는 장점이 있습니다.

  • m = 1인 경우: 최솟값과 최댓값이 같은 원소이며, 루트의 왼쪽 자식에 위치합니다.
  • m > 1인 경우: 최솟값은 루트의 왼쪽 자식에, 최댓값은 루트의 오른쪽 자식에 위치합니다.

따라서 getMingetMax 연산은 O(1) 시간에 수행됩니다.

SMMH의 필요충분조건: A1 ~ A3

루트가 비어 있고 나머지 모든 노드에 원소가 하나씩 있는 (m + 1)노드 완전 이진 트리가 SMMH이기 위한 필요충분조건은 다음 세 가지입니다.

  • A1. 오른쪽 형제(right sibling)를 가진 모든 노드 y에 대해, y의 원소는 y의 오른쪽 형제의 원소보다 작거나 같다.
  • A2. 조부모(grandparent)를 가진 모든 노드 y에 대해, 조부모의 왼쪽 자식의 원소는 y의 원소보다 작거나 같다.
  • A3. 조부모를 가진 모든 노드 y에 대해, 조부모의 오른쪽 자식의 원소는 y의 원소보다 크거나 같다.

여기서 주목할 점은, 노드 y에서 성질 A1이 이미 만족되어 있다면 A2와 A3 중 최대 하나만 위반될 수 있다는 사실입니다. 이 특성 덕분에 삽입·삭제 과정에서 깨진 조건을 한 번의 교환으로 복원할 수 있습니다.

삽입·삭제 알고리즘과 시간 복잡도

성질 A1부터 A3를 유지하도록 구현하면 매우 단순한 형태의 삽입·삭제 알고리즘을 얻을 수 있습니다. 이 알고리즘들은 최소 힙(min heap)과 최대 힙(max heap)의 대응 알고리즘을 변형한 것으로, 시간 복잡도는 O(log m)입니다.

삽입 연산 예시: 원소 3 삽입하기

그림 1의 SMMH에 3을 삽입하는 과정을 살펴보겠습니다. SMMH는 완전 이진 트리이므로, 새 노드는 반드시 마지막 위치, 즉 그림 2에 표시된 자리에 추가해야 합니다. 이 새 노드를 B라고 부르겠습니다.

예제에서 B는 빈 노드(empty node)를 나타내며, 원소 3이 이 자리에 삽입됩니다. 삽입 후에는 A1~A3 조건이 깨졌는지 검사하고, 위반이 발견되면 형제 노드 또는 조부모의 자식 노드와 원소를 교환하는 sift-up 과정을 통해 힙의 성질을 복원합니다. 이 과정은 트리의 높이에 비례하므로 O(log m) 시간에 완료됩니다.

정리

  • 구조: 루트가 빈 완전 이진 트리, 총 노드 수 m + 1
  • 조회: getMin / getMax를 O(1)에 수행
  • 삽입·삭제: O(log m)에 수행
  • 핵심 불변식: A1(형제 간 대소 관계), A2(왼쪽 방향 하한), A3(오른쪽 방향 상한)

이처럼 SMMH는 단순한 구조만으로 최솟값과 최댓값을 모두 상수 시간에 조회할 수 있으면서, 삽입과 삭제도 일반 힙과 동등한 로그 시간에 처리할 수 있는 실용적인 자료구조입니다.