← 질문 목록
#259깊이 0
우선순위 큐를 힙으로 구현하는 이유는 무엇인가?
정렬해 두면 넣을 자리를 만드느라 O(N)이 들고, 정렬하지 않으면 넣기는 싸지만 가장 급한 것을 찾는 데 O(N)이 든다. 어느 쪽이든 한 곳에서 값을 치른다.
| 힙 종류 | 부모·자식 관계 |
|---|---|
| 최대 힙 | 부모가 자식보다 항상 크거나 같다 |
| 최소 힙 | 부모가 자식보다 항상 작거나 같다 |
힙은 완전 이진 트리 구조를 사용한다. 완전 이진 트리라 삽입과 삭제가 모두 O(log N)이다.
반면 정렬된 배열은 삭제는 빠르지만 삽입 시 데이터 이동이 O(N)만큼 필요하다. 정렬되지 않은 배열은 삽입은 빠르지만 최댓값/최솟값을 찾는데 O(N)이 걸린다.
다익스트라 알고리즘이나 OS의 스케줄러처럼 우선순위가 계속 바뀌는 환경에서 힙을 선택한다.
추천 꼬리질문
관련 질문
- 스택과 큐는 각각 어떤 상황에서 선택해야 하는가?자료구조 · 알고리즘우선순위 큐와 일반 큐는 모두 데이터를 저장하고 관리하는 큐 계열의 자료구조로서 선택 기준을 공유한다.
- 스택과 큐의 가장 큰 차이는 무엇인가?자료구조 · 알고리즘우선순위 큐와 일반 큐 모두 큐(Queue)라는 추상 자료형의 변형 및 구현체라는 공통점을 가진다.
- K-way 병합 알고리즘에서 힙의 역할은 무엇인가?자료구조 · 알고리즘
- K-way 병합 시 최소 힙 대신 패자 트리를 사용하는 이유는 무엇인가?자료구조 · 알고리즘
- 일반 이진트리 대신 이진탐색트리를 사용하는 이유는 무엇인가?자료구조 · 알고리즘