데이터를 정렬된 상태로 유지해주는 파이썬의 내부 모듈 heapq에 대해 알아보자!🧐
heapq 모듈은 이진 트리 기반의 최소 힙 자료구조를 제공한다.
예를 들어
[3,6,4,8,2,1]
이 배열에서 가장 작은 정수를 구하기 위해서는 for문을 돌려 시간복잡도는 O(N)이 될 것이다.
하지만 힙은 logN의 속도로 더 빠르게 찾을 수 있게 도와준다.
그러니 먼저 힙 자료구조에 대해 알아보자
🔮 완전 이진 트리
마지막을 제외한 모든 노드에서 자식들이 꽉 채워진 이진트리
힙은 루트가 가장 작은 값인 최소힙과 루트가 가장 높은 값인 최대힙이 있다.

push나 pop을 실행하면 자식 인덱스와 비교하면서 루트까지 오게 된다.
import heapq
heap = []
heapq.heappush함수를 이용해
첫번째 인자에는 원소를 추가할 리스트
두번째 인자에는 추가할 원소를 적는다.
heapq.heappush(heap, item)
heapq.heappush(heap, item2)
print(heap)
# [item, item2]
heap = [1, 2, 3, 4, 5]
heapq.heapppop(heap)
print(heap)
# [2, 3, 4, 5]
import heapq
arr = [3, 5, 2, 4]
heapq.heapify(arr)
print(arr)
# [2, 3, 4, 5]
reverse = lambda x: x * -1
max_heap = list(map(reverse, heap))
heapq.heapify(max_heap)
max_heap = list(map(reverse, max_heap))
음수로 바꿨다가 다시 양수로 바꿔야되기 때문에 매우 번거롭다.
최대 힙을 쓸 때는 최대 힙 클래스를 정의해 만드는 것이 좋을 것 같다.