힙(Heap)은 여러 값 중 가장 크거나 작은 값을 빠르게 찾기 위해 고안된 완전 이진 트리 형태의 자료구조입니다
완전 이진 트리구조를 유지합니다힙은 주로 배열을 이용해 구현되며, 자식과 부모 간의 인덱스 관계는 다음과 같습니다
(자식 인덱스)/2(부모 인덱스)*2(부모 인덱스)*2 + 1먼저 예시 배열 [7, 3, 5, 2, 8, 1, 4, 6]을 완전 이진 트리 형태로 구성합니다

배열을 [1,3,2,6,8,5,4,7] 형태로 정렬했습니다
이 배열을 기반으로 최소 힙의 삽입,삭제 과정을 살펴보겠습니다

기존 예시 배열에 원소 1을 삽입합니다
현재 힙은 최소힙 형태로 구성되어 있습니다

새 원소(1)는 부모 노드(6)과 비교하며, 새 원소가 더 작으므로 서로의 위치를 바꿉니다

다시 부모 노드(3)과 비교하며, 새 원소가 더 작으므로 서로의 위치를 바꿉니다
위와같은 삽입 과정을 통해,
새로운 원소 1이 삽입되었지만 최소 힙 구조가 유지됩니다
삽입 이후 배열은 [1,1,2,3,8,5,4,7,6] 형태입니다
앞서 삽입 과정에서 갱신된 배열의 첫 원소 1을 삭제합니다

먼저 루트 노드를 삭제한 후 마지막 노드(6)을 루트 위치로 이동합니다

새 루트(6)은 두 자식(1, 2) 중 더 작은 값(1)과 교환합니다

다시 자식들(3, 8)과 비교해 작은 값(3)과 교환합니다
위와같은 삭제 과정을 통해,
원소 1이 삭제되었지만 최소 힙 구조가 유지됩니다
삭제 이후 배열은 [1,3,2,6,8,5,4,7] 형태입니다
힙은 배열 기반으로 구현되므로 공간 복잡도는 O(N)입니다
Java의 PriorityQueue힙은 여러 개의 값 중에서 가장 크거나 작은 값을 빠르게 찾기 위해 만든 이진트리 형태의 자료구조입니다
최소, 최댓값을 빠르게 찾을 수 있다는 장점이 있지만, 임의의 값 검색은 비효율적이라는 단점이 있습니다