자료구조
힙 자료구조
Grey Kang
2021. 3. 2. 21:10
반응형
힙 HEAP
힙은 최소값이나 최대값을 빠르게 찾아내기 위한 트리의 일종
힙에는 최대힙과 최소힙이 있다
최대힙과 최소힙
Max Heap: 완전 트리이면서 ROOT가 모든 경우에 자식들보다 큰 힙(즉 최대값을 찾아내는 Heap)
Min Heap: 완전 트리이면서 ROOT가 모든 경우에 자식들보다 작은 힙(즉 최소값을 찾아내는 Heap)
Heap 특징
힙은 최댓값 및 최소값을 찾아내는 연산을 빠르게 하기 위한 완전 이진 트리
힙 트리는 중복값을 허용한다
힙을 이용해 우선 순위 큐를 만들어낼 수 있다
Heap Sort의 시간 복잡도
O(logN) // 매우 빠른 정렬 알고리즘
파이썬을 이용한 힙
파이썬의 내장 모듈 heapq를 이용한다
import heapq
- heappush 이용한 원소 추가
heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
- heappop을 이용한 원소 삭제
print(heapq.heappop(heap))
- 기존 리스트를 힙으로 변환
heapq.heapify(heap)
- 최대 힙 구현
import heapq
nums = [4, 1, 7, 3, 8, 5]
heap = []
for num in nums:
heapq.heappush(heap, (-num, num)) # (우선 순위, 값)
while heap:
print(heapq.heappop(heap)[1]) # index 1
- K번째 최소값/최대값
import heapq
def kth_smallest(nums, k):
heap = []
for num in nums:
heapq.heappush(heap, num)
kth_min = None
for _ in range(k):
kth_min = heapq.heappop(heap)
return kth_min
반응형