[python] heapq 내장 모듈로 힙 자료구조 사용하기

  • python
  • algorithm

파이썬의 heapq 모듈로 힙 자료구조 사용하기

1. 모듈 불러오기

from heapq import heappush, heappop

2. 힙 생성

일반적으로 다른 언어에서는 힙 객체를 생성하기 위한 별도의 클래스를 제공하는 경우가 많음. BUT python 에서는 리스트로 사용가능

3. 힙 생성

heap = []

4. 힙에 원소 추가

from heapq import heappush

heap = []
heappush(heap, 4)
heappush(heap, 1)
heappush(heap, 7)
heappush(heap, 3)
heappush(heap, 8)
heappush(heap, 5)

print(heap)

[1, 3, 5, 4, 8, 7]

  • 기본적으로 heap은 이진트리의 자료구조를 하고 있음.

5. heap에서 원소 삭제

from heapq import heappop
heappop(heap)
print(heap)
  • 가장 작은 원소를 pop(root)함.

6. 기존 리스트를 힙으로 변환

from heapq import heapify

heap = [4, 1, 7, 3, 8, 5]
heapify(heap)

print(heap)

[1, 3, 5, 4, 8, 7]

  • heapify() 함수를 통해 일반 list를 heap 자료구조로 변환 가능

7. [응용] 최대힙

from heapq import heappush, heappop

nums = [4, 1, 7, 3, 8, 5]
heap = []

for num in nums:
    heappush(heap, (-num, num))

왜 음수를 넣는가

heapq는 가장 작은 값을 먼저 꺼내는 최소 힙임.

최우진 프로필

Woojin

구조적으로 사고하고, 근거 있게 구현하기 위해 기록합니다.