본 정리는 신찬수 교수님의 자료구조를 듣고 작성한 글이다. 강의는 유튜브에 있다.
(max heap의 예시 : https://www.tutorialspoint.com/data_structures_algorithms/heap_data_structure.htm)
def heapify(unsorted, index, heap_size):
largest = index
left_index = 2 * index + 1
right_index = 2 * index + 2
if left_index < heap_size and unsorted[left_index] > unsorted[largest]:
largest = left_index
if right_index < heap_size and unsorted[right_index] > unsorted[largest]:
largest = right_index
if largest != index:
unsorted[largest], unsorted[index] = unsorted[index], unsorted[largest]
heapify(unsorted, largest, heap_size)
find_max: return A[1]
delete_max
make_heap: O(n), O(nlgn)
insert: O(lgn)
find_max: O(1)
delete_max: O(lgn)
heapify_down, heapify_up: O(h)=O(lgn)
-> 힙은 최댓값 혹은 최솟값을 찾거나 삭제할 때 매우 유용하다.
makeheap #O(nlgn)
for k in range(n): #O(n)
delete_max # 삭제 하지 않고, pop 해서 다른 곳으로 빼놓는다.
힙소트: O(nlgn)
Reference
https://ict-nroo.tistory.com/55