힙(heap)
1. 힙(Heap)의 개념 및 구조
최대 힙(Max Heap) 구조 예시
최소 힙(Min Heap) 구조 예시
힙(Heap)은 완전 이진 트리(complete binary tree) 구조의 일종으로, 노드 중에서 키 값이 가장 크거나 가장 작은 노드를 빠르게 찾기 위해 고안된 자료구조입니다.
힙의 주요 특징
- 완전 이진 트리: 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입
- 반 정렬 상태 유지: 부모의 노드 키 값이 자식 노드의 키 값보다 항상 크거나(최대 힙), 작음(최소 힙)
- 중복 값 허용: 일반적인 이진 트리와 달리 중복된 값을 허용
힙의 종류
종류 | 설명 |
---|---|
최대 힙 (Max Heap) | 부모 노드의 키 값 ≥ 자식 노드의 키 값. 루트 노드가 가장 큰 키 값을 가짐 |
최소 힙 (Min Heap) | 부모 노드의 키 값 ≤ 자식 노드의 키 값. 루트 노드가 가장 작은 키 값을 가짐 |
이진 힙 (Binary Heap) | 완전 이진 트리로서 부모의 우선순위가 자식의 우선순위보다 높은 구조 |
힙 vs 이진 탐색 트리
힙(Heap) | 이진 탐색 트리(BST) | |
---|---|---|
최적화 | 최대/최소값 검색 | 탐색(검색) |
자식 노드 | 왼쪽/오른쪽 상관없음 | 왼쪽 < 부모 < 오른쪽 |
중복 값 | 허용 | 일반적으로 허용하지 않음 |
2. 힙의 배열 구현
힙은 일반적으로 배열로 구현합니다. 완전 이진 트리의 노드들은 레벨 순회(level order traversal) 순서에 따라 1차원 배열에 저장됩니다. (보통 a[1]
부터 시작)