![heap (heapq 모듈)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm2rOz%2Fbtrwre8Bx2K%2FrAQ85l1VQoh2MK2DrLjEm0%2Fimg.png)
heap (heapq 모듈)자료구조+알고리즘2022. 3. 22. 08:39
Table of Contents
Heap?
- 최댓값과 최소값을 빠르게 찾기 위한 완전 이진트리 기반 자료구조
- 인덱스 n번째 노드의 자식노드가 2개라고 하면 왼쪽 자식 노드의 인덱스는 2n, 오른쪽 자식 노드의 인덱스는 2n+1
최소힙(Min Heap)
- 각 노드가 해당 노드의 자식 노드보다 크지 않거나 작은 완전이진트리!
최대힙(Max Heap)
- 각 노드가 해당 노드의 자식 노드보다 작지 않거나 큰 완전이진트리!
heapq 모듈
- 파이썬에 기본 모듈로 바로 import 해서 사용할 수 있다.
- 기본적으로 최소 힙(Min Heap)을 사용한다!!
import heapq
heappush()
- heap에 item 추가하기
import heapq
heap = []
heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
heapq.heappush(heap, 5)
heapq.heappush(heap, 2)
heapq.heappush(heap, 6)
print(heap)
// [6, 7, 10, 15, 12, 17]
heapify(list)
- heapify() 함수의 인자에 리스트를 넣어주면 바로 힙으로 변환한다.
import heapq
heap = [6, 15 ,10 ,7, 12, 17]
heapq.heapify(heap)
print(heap)
// [6, 7, 10, 15, 12, 17]
heappop()
- 힙에서 가장 작은 원소를 제거한다.
- 당연히 heapq 모듈을 사용해서 만든 힙 리스트에서 첫번째 원소가 반환된다!
import heapq
heap = [6, 15 ,10 ,7, 12, 17]
heapq.heapify(heap)
# [6, 7, 10, 15, 12, 17]
heapq.heappop(heap)
print(heap)
// [7, 12, 10, 15, 17]
Max Heap 만들기!!
- Heap에 원소를 추가할 때 (-num, num)와 같은 튜플 형태로 값을 넣어주면 튜플의 첫번째 원소를 기준으로 최소 힙을 만들기 때문에 실제 값인 두번째 원소를 기준으로는 최대 힙(Max Heap)이 만들어진다!
import heapq
heap = [6, 15 ,10 ,7, 12, 17]
max_heap = []
for num in heap:
heapq.heappush(max_heap, (-num, num))
print(max_heap)
// [(-17, 17), (-12, 12), (-15, 15), (-6, 6), (-7, 7), (-10, 10)]
'자료구조+알고리즘' 카테고리의 다른 글
최대공약수(GCD) / 최소공배수(LCD) (0) | 2022.03.29 |
---|---|
deque로 BFS, DFS 구현 (0) | 2022.03.28 |
순열, 조합 (0) | 2022.03.18 |
정규 표현식, re 모듈 (0) | 2021.06.19 |
프로그래머스-소수구하기 (itertools) (0) | 2021.06.18 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!