본문 바로가기

00/algorithm

힙 정렬

반응형

Heap

- 큰 키에 자주 액세스하거나 키(우선 순위) 중심으로 정렬된 시퀀스를 활용해야 할 때 유용한 자료구조.

- 한 노드가 최대 두 개의 자식노드를 가지면서, 마지막 레벨을 제외한 모든 레벨에서 노드들이 꽉 채워진 완전 이진 트리를 기본으로 함.

 

Heap 이 되기 위한 조건

1. 구조 조건 - 완전 이진 트리

2. 순서 조건 - Partial Order, 값의 순서가 직계 관계(부모-자식)에서만 성립.

 

이진 탐색 트리와의 비교

- 힙은 각 자식 < 부모. (최대 힙 트리라 가정.)

- 이진 탐색트리는 왼쪽 자식 < 부모 < 오른쪽 자식.

따라서, 힙은 우선순위 정렬에, 이진 탐색 트리는 탐색에 강점을 지닌 자료구조.

 

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)

 heapify의 시간 복잡도는 최악의 경우 루트 노드에서 말단 노드까지 값을 비교해야 하므로 트리의 높이 (h=logn)에 의존적.

 

참고 : https://ratsgo.github.io/data%20structure&algorithm/2017/09/27/heapsort/

반응형

'0 > algorithm' 카테고리의 다른 글

Union Find  (0) 2020.08.31
Trie  (0) 2020.05.24
N-Queens  (0) 2019.03.26
Coin Change (DP)  (0) 2019.03.23
중복 있는 순열  (0) 2019.03.20