이번 글에서는 추상 자료형(ADT: Abstract Data Type) 중 하나인 Heap에 대해 알아봅니다.
힙(heap)은 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리(complete binary tree)를 기본으로 한 자료구조(tree-based structure)로서 부모 노드와 자식 노드의 키값이 대소관계가 성립한다.
새로운 값을 넣어주거나 기존 값을 빼주면 대소관계에 따라 값을 재배열하며 이때의 시간 복잡도는 이다.
종류에 따라 최댓값 혹은 최솟값이 항상 Root에 위치한다.
부모노드의 키값이 자식노드의 키값보다 항상 큰 힙
부모노드의 키값이 자식노드의 키값보다 항상 작은 힙
Root에 위치한 최솟값 혹은 최댓값을 빼주는 것
[예시]
heapq
을 이용하여 간단히 힙 자료구조를 사용할 수 있다.[입력 예시]
from heapq import heapify
example = [1, 5, 4, 3, 2]
heapify(example)
print(example)
[출력 예시]
[1, 2, 4, 3, 5]
heappush(<Target>, <item>)
: <Target>
에 <item>
을 힙 방식으로 추가한다.[입력 예시]
from heapq import heappush
example = []
heappush(example, 5)
heappush(example, 3)
heappush(example, 1)
heappush(example, 2)
heappush(example, 4)
print(example)
[출력 예시]
[1, 2, 3, 5, 4]
heappop(<Target>)
: <Target>
의 0번 인덱스를 뽑아낸다.[입력 예시]
from heapq import heappop
example = [1, 2, 3, 5, 4]
a = heappop(example)
print(a, example)
[출력 예시]
1 [2, 4, 3, 5]