1. 힙?
- 힙은 최댓값이나 최솟값을 하기 위해 사용되는 완전 이진트리 형태의 자료구조이다.
- 부모 노드는 항상 자식 노드보다 더 높은 우선순위를 가진다.
- 힙은 완전 이진트리로 정렬된 구조가 아니다.
- 부모 노드가 자식 노드보다 항상 작은 힙을 최소 힙, 부모 노드가 자식 노드보다 큰 힙을 최대 힙이라 한다.
- 형제 노드 간의 대소 관계가 보장되는 이진 탐색 트리와 다르게 힙은 형제 노드 간의 대소 관계는 보장되지 않는다.
- 힙은 부모 노드와 자식 노드 간의 대소 관계만을 보장한다.
- 우선순위 큐와 힙은 다른 개념이다. 우선순위 큐는 각 원소들이 우선순위를 갖는 추상적인 자료형으로 여러 방법으로 구현할 수 있는데 그중에서 힙을 많이 사용하는 것이다.
2. 최소 힙과 최대 힙의 비교
파이썬에서는 최소 힙만 구현되어 있고 최대 힙은 별도로 모듈에 구현되어 있지 않다.
heapq 모듈을 사용하면 최소 힙을 사용할 수 있고 간단한 작업을 통해 최대 힙으로 사용할 수도 있다.
import heapq
min_heap = []
max_heap = []
nums = [6, 11, 29, 37, 100, 28, 50, 41, 60]
for num in nums:
heapq.heappush(min_heap, num)
heapq.heappush(max_heap, -num)
print('최소힙: ', min_heap)
print('최대힙: ', max_heap)
최대 힙으로 사용하고 싶을 때는 음수로 값을 저장하고 꺼낼 때 다시 음수 처리를 하면 최대 힙처럼 사용할 수 있다
'CS > 자료구조' 카테고리의 다른 글
[자료구조] 우선순위 큐(Priority Queue) (0) | 2022.03.16 |
---|---|
[Python] 트리 구현 / 순회(전위 순회, 중위 순회, 후위 순회, 레벨 순회) (0) | 2022.03.11 |
[자료구조] 트리(Tree) (5) | 2021.04.24 |
[Python] 큐 구현 (0) | 2021.04.24 |
[Python] 이중 연결리스트 구현 (1) | 2021.04.24 |