- 힙(Heap) 이란?
- 일종의 트리
- 수의 집합에서 가장 작은 수(키)나 가장 큰 수만을 자주 꺼내올 때 유용한 자료구조
- 배열에서는 최소값 탐색시 O(n), 힙에서는 O(logn)으로 시간복잡도에서 유리
- 힙의 구조
- 트리 중 완전 이진 트리
- 항상 자식은 두개 밖에 없다.
- leaf의 가장 왼쪽부터 채운다
- 키값의 대소 관계는 부모/자식 간에만 성립
- 형제노드 사이에는 대소 관계가 정해지지 않는다
- 최소힙, 최대힙
- 최소힙: 가장 작은 값이 루트
- 최대힙: 가장 큰 값이 루트
- 힙의 구현
- leftChild = parent*2
- rightChild = parent*2+1
- parent = child/2
- 파이썬에서 heapq 모듈 사용
- import heapq : 파이썬 heapq 모듈은 heapq (prirority queue) 알고리즘 제공
- 힙 함수 활용하기
- heapq.heappush(heap, iteam): item을 heap에 추가
- heapq.heappop(heap): heap에서 가장 작은 원소를 pop & 리턴. 비어 있는 경우 IndexError가 호출됨.
- heapq.heapify(x): 리스트 x를 즉각적으로 heap으로 변환함 (in linear time, O(N))
'Lang > Python' 카테고리의 다른 글
[python] itertools을 사용한 순열과 조합 구하기와 시간복잡도 (0) | 2022.09.30 |
---|---|
[Python] 순열(permutations)과 조합(Combinations) 구현과 라이브러리 (0) | 2022.08.04 |