반응형
🚀 1. 우선순위 큐(Priority Queue)란?
**우선순위 큐(Priority Queue)**는 값이 들어온 순서와 상관없이 높은 우선순위를 가진 요소가 먼저 나오는 자료구조예요.
💡 쉽게 이해하기
- 🏥 응급실 대기열처럼 동작해요!
- 환자(데이터)의 우선순위에 따라 먼저 치료(처리)돼요.
- 🔢 최소값 또는 최대값을 빠르게 찾는 데 유용해요!
- ⏳ 일반적인 큐(Queue)와 다르게, 우선순위를 기준으로 요소를 정렬하여 처리해요.
📌 Python에서 우선순위 큐 구현
import heapq # 힙을 이용한 우선순위 큐
pq = []
heapq.heappush(pq, (1, '응급 환자')) # (우선순위, 데이터)
heapq.heappush(pq, (3, '일반 환자'))
heapq.heappush(pq, (2, '보통 환자'))
while pq:
print(heapq.heappop(pq)) # 우선순위가 가장 높은 데이터부터 출력
➡ 출력:
(1, '응급 환자')
(2, '보통 환자')
(3, '일반 환자')
🚀 2. 힙(Heap)이란?
**힙(Heap)**은 완전 이진 트리(Complete Binary Tree) 기반의 자료구조로, 항상 최댓값 또는 최솟값이 루트에 위치하는 특징이 있어요.
📌 힙의 종류
- 최소 힙(Min Heap): 루트 노드가 가장 작은 값을 가짐.
- 최대 힙(Max Heap): 루트 노드가 가장 큰 값을 가짐.
💡 힙의 특징
- 🚀 삽입, 삭제 연산이 O(log n)의 시간복잡도를 가짐 → 매우 효율적!
- 🔄 이진 트리를 사용하여 자동 정렬됨 → 최소/최대 값을 빠르게 찾을 수 있음.
📌 Python의 heapq 모듈을 활용한 최소 힙 구현
import heapq
heap = []
heapq.heappush(heap, 5)
heapq.heappush(heap, 1)
heapq.heappush(heap, 3)
print(heapq.heappop(heap)) # 최소값(1) 출력
➡ 출력: 1
📌 최대 힙을 구현하려면? (음수 활용)
import heapq
max_heap = []
heapq.heappush(max_heap, -5) # 음수를 사용하여 최대 힙처럼 동작
heapq.heappush(max_heap, -1)
heapq.heappush(max_heap, -3)
print(-heapq.heappop(max_heap)) # 최대값(5) 출력
➡ 출력: 5
🚀 3. 우선순위 큐와 힙의 시간복잡도 비교
연산 종류 우선순위 큐(정렬된 리스트) 힙(Heap)
삽입(Insert) | O(n) | O(log n) |
삭제(Delete) | O(1) | O(log n) |
최댓값/최솟값 검색 | O(1) | O(1) |
➡ 힙을 사용하면 삽입과 삭제 연산이 O(log n)으로 훨씬 빠릅니다!
🚀 4. 우선순위 큐의 활용 예시
📌 우선순위 큐는 어디에서 사용될까요?
- 다익스트라 알고리즘(Dijkstra’s Algorithm) → 최단 경로 탐색에서 사용
- 이벤트 스케줄링(Event Scheduling) → 예약 시스템, 운영체제의 작업 관리
- 데이터 스트림 처리 → 대량의 데이터에서 특정 개수만 유지할 때
- 캐싱 시스템(Cache System) → 가장 오래된 데이터를 우선 제거하는 경우
➡ 우선순위 큐는 알고리즘 문제 해결에서 매우 중요한 역할을 합니다! 😊
✅ 마무리 정리
- 우선순위 큐(Priority Queue)는 높은 우선순위를 가진 요소가 먼저 처리되는 자료구조입니다.
- 힙(Heap)은 완전 이진 트리를 기반으로 하는 자료구조로, 최소/최대 값을 빠르게 찾을 수 있습니다.
- Python의 heapq 모듈을 사용하면 효율적인 우선순위 큐를 구현할 수 있습니다.
- 다익스트라 알고리즘, 예약 시스템, 데이터 스트림 처리 등 다양한 곳에서 활용됩니다.
반응형
'IT > algorithm' 카테고리의 다른 글
[Python] 알고리즘 개념13 퀴즈 - 그래프와 탐색 (0) | 2025.02.24 |
---|---|
[Python] 알고리즘 개념12 퀴즈 - 트리와 이진 탐색 트리 (0) | 2025.02.23 |
[Python] 알고리즘 개념12 - 트리(Tree)와 이진 탐색 트리(BST) (0) | 2025.02.23 |
[Python] 알고리즘 개념11 퀴즈 - 우선순위 큐와 힙 (0) | 2025.02.23 |
[Python] 알고리즘 개념10 퀴즈 - 해시 테이블과 해싱 (0) | 2025.02.23 |
[Python] 알고리즘 개념10 - 해시 테이블과 해싱 (0) | 2025.02.23 |
[Python] 알고리즘 개념9 퀴즈 - 재귀 함수의 스택 메커니즘 (0) | 2025.02.23 |
[Python] 알고리즘 개념9 - 재귀 함수의 스택 메커니즘 (0) | 2025.02.23 |
댓글