1 minute read

파이썬 힙(Heap) 완벽 가이드: 우선순위 큐 구현의 핵심, 초보자도 쉽게 이해하는 방법

파이썬 힙(Heap)은 우선순위 큐(Priority Queue)를 구현하는 데 사용되는 자료구조입니다. 힙은 특정 순서 속성을 만족하는 완전 이진 트리(Complete Binary Tree)이며, 최소값 또는 최대값을 효율적으로 찾고 관리할 수 있도록 도와줍니다. 이 글에서는 파이썬 힙의 기본 개념, heapq 모듈 사용법, 힙 정렬 등을 예제 코드와 함께 자세히 설명합니다.

1. 힙(Heap)이란 무엇인가?

힙은 다음과 같은 속성을 만족하는 완전 이진 트리입니다.

  • 최소 힙(Min Heap): 부모 노드의 키(key)가 자식 노드의 키보다 작거나 같은 힙입니다.
  • 최대 힙(Max Heap): 부모 노드의 키가 자식 노드의 키보다 크거나 같은 힙입니다.

힙은 주로 우선순위 큐를 구현하는 데 사용되며, 다음과 같은 장점을 가집니다.

  • 최소값 또는 최대값을 빠르게 찾을 수 있습니다.
  • 삽입 및 삭제 연산이 효율적입니다.

2. heapq 모듈 사용법

파이썬은 heapq 모듈을 통해 힙 자료구조를 제공합니다.

2.1. 힙 생성

빈 리스트를 생성하고 heapq.heapify() 함수를 사용하여 리스트를 힙으로 변환합니다.

import heapq

heap = []
heapq.heapify(heap)

2.2. 요소 추가

heapq.heappush() 함수를 사용하여 힙에 요소를 추가합니다.

heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
heapq.heappush(heap, 7)
heapq.heappush(heap, 3)

2.3. 최소값 삭제

heapq.heappop() 함수를 사용하여 힙에서 최소값을 삭제하고 반환합니다.

min_value = heapq.heappop(heap)
print(min_value)  # 출력: 1

2.4. 최소값 확인

heap[0]을 사용하여 힙의 최소값을 확인할 수 있습니다.

min_value = heap[0]
print(min_value)  # 출력: 3

3. 힙 정렬(Heap Sort)

힙을 사용하여 데이터를 정렬하는 알고리즘입니다.

def heap_sort(arr):
    heapq.heapify(arr)
    sorted_arr = []
    while arr:
        sorted_arr.append(heapq.heappop(arr))
    return sorted_arr

arr = [4, 1, 7, 3, 8, 5]
sorted_arr = heap_sort(arr)
print(sorted_arr)  # 출력: [1, 3, 4, 5, 7, 8]

4. 최대 힙(Max Heap) 구현

파이썬 heapq 모듈은 기본적으로 최소 힙을 제공합니다. 최대 힙을 구현하려면 요소에 음수를 취하여 최소 힙을 사용합니다.

max_heap = []
heapq.heapify(max_heap)

heapq.heappush(max_heap, -4)
heapq.heappush(max_heap, -1)
heapq.heappush(max_heap, -7)

max_value = -heapq.heappop(max_heap)
print(max_value)  # 출력: 7

5. 결론

파이썬 힙은 우선순위 큐를 구현하고 데이터를 효율적으로 관리하는 데 유용한 자료구조입니다. heapq 모듈을 사용하여 힙을 생성하고 다양한 연산을 수행할 수 있습니다. 힙 정렬과 최대 힙 구현 방법을 익히고, 필요에 따라 적절한 방법을 선택하여 사용하면 더욱 효율적인 파이썬 코드를 작성할 수 있습니다.

Top