따라서 루트노드에는 항상 데이터들 중 가장 큰 값(혹은 가장 작은 값)이 저장되어 있기 때문에, 최댓값(혹은 최솟값)을 O(1)안에 찾을 수 있다.
힙에는 두가지 종류가 있다.
키값의 대소관계는 오로지 부모노드와 자식노드 간에만 성립하며, 특히 형제 사이에는 대소관계가 정해지지 않는다.
데이터의 삽입과 삭제는 모두 O(logN)이 소요된다.
이진 힙은 완전 이진 트리(Complete Binary Tree)로서, 배열로 표현하기 매우 좋은 구조로 빈틈없이 배치가 가능하다.
대개 트리의 배열 표현의 경우 계산을 편하게 하기 위해 인덱스는 1부터 사용한다.
i//2
2i
2i+1
힙에서는 가장 높은(혹은 가장 낮은) 우선순위를 가지는 노드가 항상 뿌리노드에 오게 되는 특징을 이용해 우선순위 큐와 같은 추상적 자료형을 구현할 수 있다.
다익스트라 알고리즘에도 활용된다. 힙 덕분에 다익스트라 알고리즘의 시간 복잡도는 O(V^2)에서 O(ElogV)로 줄어들 수 있었다.
힙 정렬, 최소 신장 트리(MST)를 구현하는 프림 알고리즘에도 활용된다.
https://ko.wikipedia.org/wiki/%ED%9E%99_(%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0)
https://namu.wiki/w/%ED%9E%99%20%ED%8A%B8%EB%A6%AC