[파이썬] 힙 (Heaps)의 종류와 우선순위 큐로의 활용

힙은 트리 기반의 자료 구조로, 우선순위 큐를 구현하는 데 매우 유용합니다. 이 글에서는 힙의 종류와 파이썬에서의 우선순위 큐로의 활용에 대해 알아보겠습니다.

힙의 종류

힙은 크게 최대 힙최소 힙으로 나뉩니다. 최대 힙은 부모 노드가 항상 자식 노드보다 크거나 같은 값을 가지는 특징이 있습니다. 반대로, 최소 힙은 부모 노드가 항상 자식 노드보다 작거나 같은 값을 가지는 특징을 가지고 있습니다.

우선순위 큐로의 힙 활용

우선순위 큐는 원소들을 우선순위에 따라 저장하고 접근하는 자료 구조입니다. 힙을 사용하여 우선순위 큐를 구현하는 경우, 다음과 같은 장점을 얻을 수 있습니다.

  1. 빠른 삽입 및 삭제: 힙은 삽입 및 삭제 연산이 O(log n)의 시간 복잡도를 가지기 때문에, 매우 효율적으로 원소를 추가하거나 삭제할 수 있습니다.
  2. 우선순위에 따른 정렬: 힙은 원소들을 자동으로 우선순위에 따라 정렬해주기 때문에, 우선순위에 따라 원소를 탐색하고 접근하는 데 매우 용이합니다.

다음은 파이썬에서 heapq 모듈을 사용하여 우선순위 큐를 구현하는 예제 코드입니다.

import heapq

# 빈 우선순위 큐 생성
pq = []

# 원소 추가
heapq.heappush(pq, 2)
heapq.heappush(pq, 1)
heapq.heappush(pq, 3)

# 우선순위에 따라 원소 접근
while pq:
    print(heapq.heappop(pq))

# 출력 결과: 1 2 3

위의 예제에서 heapq 모듈의 heappush 함수는 우선순위 큐에 원소를 추가하고, heappop 함수는 우선순위에 따라 원소를 접근하고 삭제합니다.

이처럼, 힙을 사용하여 우선순위 큐를 구현하면 효율적으로 원소를 처리할 수 있습니다. 힙과 우선순위 큐를 활용하여 다양한 문제를 해결하는 데 활용해보세요!