완전 이진 트리의 일종으로, 최솟값(최소 힙) 또는 최댓값(최대 힙)을 빠르게 찾고 관리하기 위해 고안된 자료구조
루트 노드부터 시작하여 왼쪽 자식 노드, 오른쪽 자식노드 순으로 데이터가 차례대로 삽입되는 트리
(출처: https://heytech.tistory.com/105)
힙의 연산 과정을 알아보자.
최소 힙으로 예를 들자.
힙에 대해 알아봤으니 우선순위 큐(Priority Queue)에 대해 알아보자.
우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조
- 데이터를 우선순위에 따라 처리 가능(병원 대기실에서 환자들은 상태에 따라 우선순위가 매겨져, 응급 환자가 먼저 진료를 받는 구조)
리스트와 힙 중 어떤 방법이 효율적일까?
💡따라서 우선순위 큐를 구현할 때 힙(heap)이 더 효율적이다.
자바(java)에서 우선순위 큐(priority queue)를 사용하여 힙(heap)을 구현해보자.
PriorityQueue<Integer> queue = new PriorityQueue<>();
queue.add(5);
queue.add(3);
queue.add(8);
queue.add(1);
queue.add(4);
while (!queue.isEmpty()){
System.out.print(queue.poll()+" ");
}
// 출력: 1 3 4 5 8
PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
queue.add(5);
queue.add(3);
queue.add(8);
queue.add(1);
queue.add(4);
while (!queue.isEmpty()) {
System.out.print(queue.poll() + " ");
}
// 출력: 8 5 4 3 1