Hippo's data
우선순위 큐 구현 (PriorityQueue, Heap) 본문
오늘은 우선순위 큐 구현에 대해 알아보겠습니다!
# 우선순위 큐란?
일반적인 큐(queue) 구조는 선입 선출인 FIFO(First In, First Out) 방식으로 작동합니다!
https://hipposdata.tistory.com/11
스택(Stack), 큐(Queue), 덱(Deque)
오늘의 포스팅은 자료구조인 스택, 큐, 덱입니다!! 특히 차례대로 쌓이는 작업을 어떤 순서대로 처리할지 나타내는 자료구조들 입니다 알고리즘 문제를 풀 때 막무가내로 풀다가 시간초과가 나
hipposdata.tistory.com
하지만 높은 우선순위(제일 큰 값, 작은 값 등)을 기준으로 자료를 꺼낼때, 매번 모든 자료의 우선순위를 계산해야하는데욥
이를 쉽게 해결할 수 있는 데이터 구조가 우선순위 큐입니다!
우선순위 큐 구조에서는 자료를 꺼낼 때, 우선순위가 높은 요소(제일 큰 값, 작은 값 등)가 먼저 처리됩니다!
# Python 구현
Python을 이용하여 구현시 두가지 방법이 존재합니다!
1. PriorityQueue
2. heapq
1. PriorityQueue
2. heapq
힙(Heap) 데이터 구조 이용
힙 구조에서 가장 작은 값은 항상 루트 노드에 위치하므로,
우선순위 큐에서 가장 작은 값을 선택할 때는 루트 노드가 꺼내지는 식으로 동작합니다!
요런 구조로 반환됩니다!
0
/ \
2 1
/ \ / \
3 5 6 4
2-1 heapq 최댓값부터 꺼내기
원래 우선순위 큐는 최솟값 순서대로 꺼내지는데욥 최댓값 순서대로 꺼내지도록 우선순위 기준을 변경할 수 있습니다
변경 과정
리스트 값 음수 변환 -> 리스트를 힙구조로 변환 -> 출력
# PriorityQueue, heapq 차이점
PriorityQueue -> 객체 자체가 우선순위 큐 형태
heapq -> 리스트 객체를 대상으로 우선순위 큐 구현 함수 제공
# 관련문제
백준 1927: 최소 힙
https://www.acmicpc.net/problem/1927
백준 11279: 최대 힙
https://www.acmicpc.net/problem/11279
백준 11286 : 절댓값 힙
'Algorithm > 알고리즘 이론(Algorithm theory)' 카테고리의 다른 글
선택 정렬 (Selection Sort) 알고리즘 (4) | 2024.11.09 |
---|---|
퀵 정렬(Quick Sort) 알고리즘 (11) | 2024.11.01 |
비교정렬 시간 성능의 하한(lower bound): O(nlogn) (0) | 2024.10.29 |
투 포인터(Two Pointer) 알고리즘 (5) | 2024.09.07 |
그리디 알고리즘(Greedy Algorithm) (0) | 2024.07.31 |