배열을 사용해서 최솟값이나 최댓값을 찾으면 Ο(n)만큼 시간이 걸린다. 하지만 힙을 사용하면 O(logn)만큼 소요되므로, 배열을 사용할 때보다 빠르게 최솟값과 최댓값을 구할 수 있다.
최대 힙(max heap)
부모 노드의 키값 >= 자식노드의 키값
최소 힙(min heap)
부모 노드의 키값 <= 자식노드의 키값
힙은 완전 이진 트리이기 때문에, 삽입할 노드는 기본적으로 왼쪽 최하단부 노드부터 채워진다.
채워진 노드의 위치에서, 부모 노드의 값보다 클 경우에는 부모 노드와 위치를 바꾸며 이를 반복한다.
1. 8을 삽입한다
2. 8과 4를 비교한다
3. 8이 더 크므로, 교환한다.
4. 8과 7을 비교하고, 8이 더 크므로 7과 교환한다.
5. 8과 9를 비교하고, 9가 더 크므로 더이상 교환하지 않는다.
최대 힙(Max Heap)에서 삭제 연산은 최댓값을 가진 요소를 삭제하는 것이다. 반대로, 최소 힙(Min Heap)에서 삭제 연산은 최솟값을 가진 요소를 삭제하는 것이다. 따라서 루트노드를 삭제하는 것이다
1. 최대힙이라면 최대값을 가진 루트노드를 삭제한다.
2. 빈자리에 마지막 노드를 가져온다.
3. 3과 7을 비교하고, 7이 더 크므로 7과 3을 교환한다.
4. 3과 5를 비교하고, 5가 더 크므로 5와 3을 교환한다.
1) https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html