우선순위 큐와 힙의 차이

우선순위 큐와 힙의 차이

큐(Queue): 먼저 들어오는 데이터가 먼저 나가는 구조 (FIFO - First In First Out)

우선순위 큐(Priority Queue): 우선순위가 높은 데이터가 먼저 나가는 구조

힙(Heap): 루트 노드에 가장 큰 값 혹은 가장 작은 값을 저장하고 있는 완전이진트리

여기서, 우선순위 큐는 일반적으로 힙을 통해 구현한다.

배열, 연결리스트 등으로 구현할 수도 있지만, 최악의 경우 우선순위를 찾기 위해 인덱스의 끝까지 탐색할 수 있기 때문이다. 반면에 힙은 부모 노드, 자식 노드와의 비교만으로 노드의 자리를 찾기 때문에 훨씬 시간 복잡도가 낫다.

- 새 데이터 삽입: O(log2n)

- 데이터 삭제: O(log2n)

둘을 비슷하거나 같게 보는 경우가 있는데, 엄연히 말하면 다르다.

추상화하면 우선순위 큐는 우선순위에 따라 일차원적으로 정렬된 큐 형태로 생각되어진다.

반대로 힙은 이러한 큐의 값을 꺼낼 때마다 우선순위에 따라 정렬되어 나와지도록 돕는 이진 트리 형태이기 때문이다.

힙이 큐가 디큐(dequeue)를 할 때 보조하는 역할이라고 보면 좋을 듯하다.

from http://verycrazy.tistory.com/19 by ccl(A) rewrite - 2021-10-21 08:27:23