CS

[CS] 힙, 우선순위 큐

펭귄코기 2022. 11. 15. 10:03

1. 힙 (Heap)

- 완전 이진트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다

(우선순위 큐 : 데이터들이 우선순위를 가지고 있어, 우선순위가 높은 데이터가 먼저 나간다)

 

- 여러개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다

힙은 일종의 반정렬 상태 (느슨한 정렬 상태)를 유지한다

 

- 쉽게말해 부모 노드의 키 값이 자식 노드의 키 값보다 항상 크거나 작은 이진트리이다

 

- 힙 트리에서는 중복된 값을 허용한다 (이진 탐색 트리에서는 중복된 값을 허용하지 않는다)

 

2. 힙의 종류

최대힙

- 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진트리이다

- Key (부모노드) >= key (자식노드)

 

최소힙

- 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진트리이다

- Key (부모노드) <= key (자식노드)

 

3. 시간 복잡도

삽입 : O (log n)

- 힙에 새로운 요소가 들어오면 일단 새로운 노드를 힙의 마지막 노드에 삽입한다

- 새로운 노드를 부모 노드들과 교환한다

 

삭제 : O (log n)

- 최대 힙에서 최대값은 루트 노드이므로 루트 노드가 삭제된다

(최대 힙에서 삭제 연산은 최대 값의 요소를 삭제하는 것이다)

- 삭제된 루트 노드에는 힙의 마지막 노드를 가져온다

- 힙을 재구성한다

 

4. 우선순위 큐 (Priority Queue)

우선순위 큐는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는 것이다

우선순위 큐는 일반적으로 힙(Heap)을 이용하여 구현한다

 

enqueue()

- queue에 새 요소를 삽입한다

- 힙의 삽입과 동일한다

 

dequeue()

queue에서 최대 우선 순위 요소를 삭제하고 그 값을 반환한다

- 힙의 삭제와 동일하다

 

peek()

queue에서 최대 우선순위 요소를 반환한다