Heap Sort
두비니
·2023. 7. 4. 05:43
Heap Sort
0. 개요
앞서 다뤘던 내용들은 자료구조를 사용하지 않는 알고리즘이었다. (Insertion Sort, Merge Sort 등)
그러나 자료구조를 사용할 경우 더 효율적으로 문제를 풀 수 있는 경우가 생기며, 대표적으로 Max heap를 사용하는 Heap Sort가 있다.
1. 자료구조 heap
자료구조 heap, 특히 max heap에 대해서 알아봅시다.
Max Heap이 되기 위해서는 다음 조건을 만족해야한다.
1) a complete binary tree여야함
- tree 구조에서 마지막 level을 빼고는 모두 차 있어야 함
- 마지막 level은 왼쪽부터 오른쪽으로 차있음
2) Max-heap Property를 가지고 있어야 함
- key(x) >= keys(at x's children)
- 부모 노드의 값이 가장 커야
2. Heap Sort
Heap Sort는 위에서 다룬 Heap의 성질을 활용하여 정렬하는 것이다. 주요 알고리즘은 다음과 같다.
따라서 Heapsort를 이해하기 위해서는 `BUILD-MAX-HEAP` 함수와 `MAX-HEAPIFY` 함수에 대해서 이해해야 한다. 각 내용은 다음과 같다.
2.1 MAX-HEAPIFY
Max-Heapify 기본 아이디어: 자료구조 전체를 heap으로 만들기 위함임
- 왼쪽 자식 트리와 오른쪽 자식 트리가 모두 heap property를 만족하지만, root만이 조건을 만족하지 않는 경우
전반적인 과정
- 두 자식노드 중 더 큰 값을 선택
- 부모 노드보다 자식 노드의 더 큰 값이 큰지 확인
- 자식 노드의 값이 더 크면 바꿈
- 만약 바꾸는 경우, 바꾼 노드가 다시 heap property를 만족하는지 확인
Psuedocode
각각 subtree의 부모 노드를 불러오고, 이를 각각 기존 부모 노드와 비교한다.
이론에서는 두 자식 노드 중 큰 것과 비교한다고 하는데, 그렇게 진행하지는 않는다.
Time Complexity - O(lgn)
2.2 BUILD-MAX-HEAP
2.3 Time Complexity of Heap Sort
O(n)번 진행하고, 각 MAX-HEAPIFY마다 O(lgn)이므로 결과는 O(n*lgn)
3. Heap Sort Time Complexity - 심화
기본적으로 Heap Sort의 Time Complexity는 O(n*lgn)이다. 그러나 증명을 통해 O(n)임을 증명할 수도 있다. 증명 과정은 아래와 같다.
참고
'Coding_Algorithm > DS_Algorithm' 카테고리의 다른 글
Hash Table/Algorithm and Collision Resolution (0) | 2023.07.17 |
---|---|
Quick Sort (0) | 2023.07.05 |
Probabilistic Analysis (0) | 2023.07.01 |
Growth of Function (0) | 2023.06.30 |
Divide and Conquer 관점에서 본 Merge Sort (0) | 2023.06.29 |