우선순위 큐(Priority)
- 순서에 상관없이 우선수위가 높은 데이터가 먼저 나가는 형태의 자료구조
- 우선순위 대기열이라고도 함
- 대기열에서 우선순위가 높은 요소가 우선순위가 낮은 요소보다 먼저 제공되는 자료구조
- 일반적으로 힙(Heap)을 사용하여 구현
- 모든 항목에는 우선순위가 있음
- 우선순위가 높은 요소는 우선순위가 낮은 요소보다 먼저 큐에서 제외
- 두 요소의 우선순위가 같은 경우 큐의 순서에 따라 제공
우선순위 큐 구현 방법
- 배열, 연결리스트, 힙을 이용하여 구현 가능
구현 방법 | 삽입 (enqueue) | 삭제 (denqueue) |
배열 (unsorted array) | O(1) | O(N) |
연결 리스트 (unsorted linked list) | O(1) | O(N) |
정렬된 배열 (sorted array) | O(N) | O(1) |
정렬된 연결 리스트 (sorted linked list) | O(N) | O(1) |
힙 (heap) | O(logN) | O(logN) |
우선순위 큐 ADT
객체
- 우선순위를 가진 요소들의 모음
연산
- insert(x) : 우선순위 큐에 요소 x 추가
- remove() : 우선순위 큐에서 가장 우선순위가 높은 요소를 삭제하고 반환
- find() : 우선순위 큐에서 가장 우선순위가 높은 요소를 반환
우선순위 큐의 동작
- peek()
- 우선순위 큐에서 최대 우선순위 값을 반환
- 최대 우선순위 값(최대 힙)은 항상 루트에 있으므로 루트 값을 반환
- enqueue()
- 우선순위 큐(최대 힙)에 요소를 삽입
- heapify()
- 힙 속성을 유지하며, 위에서 아래로 내려가면서 작업
- 자식 노드와 우선순위를 비교
- 만약 자식 노드 우선순위가 높다면 왼쪽 오른쪽 자식 중 가장 우선순위가 높은 노드와 교환
- 힙 속성이 유지될 때까지 1,2번 과정을 반복
- 힙 속성을 유지하며, 위에서 아래로 내려가면서 작업
- dequeue()
- 우선순위 큐(최대 힙)에 최대 우선순위 요소를 삭제하고 그 값을 반환하는 작업
우선순위 큐의 사용사례
- CPU 스케줄링
- Dijkstra's shortest path algorithm, Prim's Mininum Spanning tree
- 우선순위를 포함한 모든 queue 응용
반응형
'🖥️ Computer Science > Data Structure' 카테고리의 다른 글
[Swift] 스택(Stack) 구현하기 (0) | 2024.09.27 |
---|---|
[자료구조] 해시 테이블(Hash Table) (0) | 2023.03.15 |
[자료구조] 힙(Heap) (0) | 2023.03.13 |
[자료구조] 트리(Tree) (0) | 2023.03.09 |
[자료구조] 그래프(Graph) (0) | 2023.03.08 |
댓글