힙은 이진 트리의 한 형태로, 다음과 같은 특징을 가집니다:
크거나 같은 구조.작거나 같은 구조.파이썬의 heapq 모듈은 최소 힙(Min Heap)을 기본으로 합니다.
힙은 주로 다음과 같은 상황에서 사용됩니다:
우선순위 큐(Priority Queue): 힙을 사용하면 높은 우선순위를 가진 요소를 빠르게 찾을 수 있습니다.
최소값/최대값 탐색: 힙 구조에서는 최소값 또는 최대값을 빠르게 찾을 수 있습니다.
정렬: 힙 정렬(Heap Sort)을 통해 정렬 작업을 수행할 수 있습니다.
파이썬에서는 heapq 모듈을 사용하여 힙을 쉽게 구현할 수 있습니다. 기본적으로 리스트를 힙으로 변환하여 사용합니다.
import heapq
# 리스트를 힙으로 변환
heap = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
heapq.heapify(heap)
print(heap) # [1, 1, 2, 3, 5, 9, 4, 6, 5, 3, 5]
heapq 모듈에서 제공하는 주요 함수들은 다음과 같습니다:
heapq.heappush(heap, item): 힙에 새로운 요소를 추가합니다.heapq.heappop(heap): 힙에서 가장 작은 요소를 제거하고 반환합니다.heapq.heapify(iterable): 주어진 iterable을 힙으로 변환합니다.heapq.heappushpop(heap, item): 힙에 새로운 요소를 추가한 후 가장 작은 요소를 제거하고 반환합니다.heapq.heapreplace(heap, item): 힙에서 가장 작은 요소를 제거하고, 새로운 요소를 추가합니다.import heapq
tasks = [(1, 'Write code'), (3, 'Release product'), (2, 'Test application')]
heapq.heapify(tasks)
while tasks:
priority, task = heapq.heappop(tasks)
print(f'Priority: {priority}, Task: {task}')
import heapq
nums = [4, 1, 7, 3, 8, 5]
k = 3
heapq.heapify(nums)
for _ in range(k - 1):
heapq.heappop(nums)
print(heapq.heappop(nums)) # k번째 작은 값
힙은 다양한 알고리즘과 데이터 구조에서 중요한 역할을 하며, 이를 효율적으로 활용할 수 있다면 많은 문제를 쉽게 해결할 수 있습니다. 이번 글을 통해 파이썬에서 힙을 사용하는 방법을 이해하고, 실전에서 활용해 보세요.