우선순위 큐
- 우선순위 큐의 정의
- 우선순위 큐의 구현
- Heap
- Heap의 정의
- Heap의 구현
- Heap에서의 insert / delete (Up-Heap, Down-Heap)
- 우선순위 큐의 사용 예시
우선순위 큐란?
- 스택? LIFO - 가장 마지막에 삽입된 원소가 가장 먼저 추출된다
- 큐? FIFO - 가장 먼저 삽입된 원소가 가장 먼저 추출된다
- 우선순위 큐?
- 큐와 달리, 각 item들이 우선순위를 가지고 있다.
- 높은 우선순위를 가진 item들이 가장 먼저 추출된다.
- 값이 클수록 높은 우선순위를 가진다면, 큰 값부터 추출
- 값이 작을수록 높은 우선순위를 가진다면, 작은 값부터 추출
- 구현
- 1) 우선순위에 따라 정렬되어 있는 경우
- delete는 빠르지만, insert는 느리다
- 2) 우선순위에 따라 정렬되어 있지 않은 경우
- insert는 빠르지만, delete는 느리다.
- 1) 우선순위에 따라 정렬되어 있는 경우
우선순위 큐의 구현?
구현 | insert | delete | find high priority |
BST (binary searcg tree) | 평균 O(logN) | 평균 O(logN) | 평균 O(logN) |
AVL Tree | O(logN) | O(logN) | O(logN) |
binary heap | O(logN) | O(logN) | O(1) |
ordered list | O(N) | O(1) | O(1) |
unordered list | O(1) | O(N) | O(N) |
(표 : dongchans.github.io/2019/29/ )
- binary search tree를 사용하게 되면 왜 안 좋은가?
- 작을수록 우선순위가 크다고 했을 때,
- priority queue에서 하나씩 제거하면 왼쪽에 존재하는 item이 계속 제거된다.
- 따라서 오른쪽으로 긴 모양의 tree가 되기 때문에 delete가 O(n)에 가깝게 되기 때문이다.
- +) 위의 도표에서도 "평균" O(logN)이라고 표기한 이유
- bineary heap을 통해서 우선순위 큐를 구현할 때 성능이 가장 좋다.
우선순위 큐의 사용?
- 다익스트라 알고리즘 : 최단거리 찾는 문제
- 균일비용탐색, 최상우선탐색, A* 알고리즘
'다전공_컴퓨터공학 > 자료구조, 알고리즘' 카테고리의 다른 글
[자료구조] Heap (python heapq) (0) | 2020.12.20 |
---|---|
[인공지능] 균일비용탐색 / 최상우선탐색 / A* 알고리즘 (0) | 2020.12.20 |
[자료구조] 데크 (double ended queue) (0) | 2020.12.20 |
[자료구조] 스택(Stack), 큐(Queue) (0) | 2020.11.25 |
[자료구조] 연결 리스트 (linked list) (0) | 2020.11.18 |