[javascript] 힙 (Heap) 데이터 구조
힙(Heap)은 데이터를 저장하고 조작하기 위한 트리 기반의 자료 구조입니다. 힙은 주로 우선순위 큐와 힙 정렬 알고리즘에서 사용됩니다.
종류
주로 사용되는 두 가지 종류의 힙이 있습니다:
- 최대 힙 (Max Heap): 부모 노드의 값이 자식 노드보다 크거나 같은 완전 이진 트리
- 최소 힙 (Min Heap): 부모 노드의 값이 자식 노드보다 작거나 같은 완전 이진 트리
주요 동작
힙은 다음과 같은 주요 동작을 포함합니다:
- 삽입(insert): 힙에 새로운 원소를 추가합니다. 이후 힙 속성을 유지하기 위해 재조정(reheapify) 작업이 수행됩니다.
- 삭제(delete): 힙에서 최상위 노드(최대 원소 또는 최소 원소)를 제거합니다. 이후 힙 속성을 유지하기 위해 재조정(reheapify) 작업이 수행됩니다.
- 재조정(reheapify): 힙의 속성을 유지하기 위해 부모와 자식 노드 사이에서 데이터를 교환하거나 재배치하는 작업
활용
힙은 주로 우선순위 큐(priority queue) 자료 구조에서 사용됩니다. 또한, 힙은 힙 정렬(Heap Sort) 알고리즘의 핵심 구성 요소이기도 합니다.
힙은 최대/최소값에 빠른 접근이 가능하며, 정렬되지 않은 데이터를 정렬 상태로 유지하면서 원소를 추가하거나 삭제하는 데 효율적으로 사용될 수 있습니다.
결과
힙을 사용하면 효율적인 우선순위 큐와 정렬 알고리즘을 구현할 수 있습니다.
이러한 특징으로 인해, 힙은 실제 응용 프로그램에서도 널리 사용되며, 많은 언어 및 라이브러리에서 기본 제공됩니다.
참고 자료
- GeeksforGeeks의 “Heap Data Structure” 게시물
- Wikipedia의 “Heap (data structure)” 항목
- “Introduction to the Design and Analysis of Algorithms” (Anany Levitin, Maria Levitin) - 책에서 힙의 이론과 실제적인 응용에 대해 자세히 다룸