본문 바로가기

6.5. Data Sturcture

6/27(화) IT 자료구조(10일차) / 10. 힙(Heap) (2)

 

10. 힙(Heap)

 

10-5. heapq 라이브러리 사용

heapq 라이브러리는 파이썬의 표준 라이브러리인 heapq 모듈을 의미.

이 모듈은 힙(heap) 자료구조를 구현하는 함수와 알고리즘을 제공.

 

import heapq as hq
import random as r

# random.randint()
list_data = [r.randint(1,30) for _ in range(6)] # 1부터 30까지 6개의 숫자를 무작위로 뽑음
print(list_data)
print()



# 최소 힙 : 기록순 정렬
print('힙 만들기')
hq.heapify(list_data) # heapify(): 리스트를 힙으로 변환하는 역할
print(list_data)


# print(list_data.pop(0)) #  맨 앞의 숫자를 제거하여 반환하는 경우 1


# print(list_data)' # 이후 출력한 힙


hq.heappop(list_data) #  맨 앞의 숫자를 제거하여 반환하는 경우 2
print(list_data)
print()


print('최대힙 만들기')
hq._heapify_max(list_data) # _heapify_max(): 최대 힙(max heap)으로 리스트를 변환하는 내부적인 함수
print(list_data)
hq.heappop(list_data)
print(list_data)

 

==========================================================


import heapq
import random

class MaxHeap:
  def __init__(self):
    self.data = [ ]

  def top(self): # 힙에서 가장 큰 값을 반환하는 메서드
    return -self.data[0]

# heapq 모듈은 최소 힙을 기본으로 지원하므로, 

최대 힙을 구현하기 위해 -self.data[0]와 같이 음수로 변환하여 반환함.

  def push(self, val): # 힙에 값을 추가하는 메서드.
    heapq.heappush(self.data, -val)
# heapq 모듈이 최소 힙을 지원하기 때문에 최대 힙을 구현하기 위해 음수 값을 활용


  def pop(self): # 힙에서 가장 큰 값을 제거하고 반환하는 메서드
    return -heapq.heappop(self.data)
# 마찬가지로, 최소 힙을 기반으로 동작하는 heapq 모듈을 활용하므로 

-heapq.heappop(self.data)와 같이 음수 값을 반환

 

mxh = MaxHeap()
for _ in range(5):
  item = random.randint(1,20)
  print(item, end = ' ')
  mxh.push(item)
print()
print(mxh.data)
print(mxh.top())