class BinaryHeap(object):
def __init__(self):
self.items = [None]
def __len__(self):
return len(self.items) - 1 # 배열의 마지막 인덱스를 가리키게끔 함
def _percolate_up(self): # insert에서 쓰일 내부 함수이므로 앞에 _를 붙임
idx = len(self)
parent = idx // 2
while parent > 0:
if self.items[idx] < self.items[parent]:
self.items[parent], self.items[idx] = self.items[idx], self.items[parent]
idx = parent
parent = idx // 2
def insert(self, k):
self.items.append(k) # 일단 맨 뒤에 붙인 후
self._percolate_up() # 최소 힙을 만족할 때 까지 자식, 부모 값 계속 변경
def _percolate_down(self, idx):
left = idx * 2
right = idx * 2 + 1
smallest = idx
if left <= len(self) and self.items[left] < self.items[smallest]:
smallest = left
if right <= len(self) and self.items[left] < self.items[smallest]:
smallest = right
if smallest != idx:
self.items[idx], self.items[smallest] = self.items[smallest], self.items[idx]
self._percolate_down(smallest)
def extract(self):
extracted = self.items[1]
self.items[1] = self.items[len(self)]
self.items.pop()
self._percolate_down(1)
return extracted
출처
파이썬 알고리즘 인터뷰 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com
'Algorithm > 이론' 카테고리의 다른 글
트라이 (0) | 2022.09.13 |
---|---|
다익스트라 알고리즘 예시 코드 [C++, Python] (0) | 2022.08.25 |
배열 3개로 연결리스트 흉내내기 (0) | 2022.07.22 |
BFS 예시 코드 [C++, Python] (0) | 2022.07.09 |
재귀로 조합 구현하기 [C++} (0) | 2022.07.08 |