Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- programmers
- Stack
- 자료구조
- 알고리즘스터디
- type hint
- aws jupyter notebook
- 정보처리기사 c언어
- 알고리즘 스터디
- pandas
- javascript
- 프로그래머스
- 코딩테스트
- dataframe
- 백준
- NumPy
- 알고리즘
- String Method
- openCV
- queue
- Matplotlib
- 가상환경
- Selenium
- MySQL
- 데이터시각화
- 파이썬
- python
- Join
- Algorithm
- 노마드코딩
- 선그래프
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[자료 구조] 우선순위 큐(Priority Queue)와 힙(Heap) 본문
DataStructure & Algorithm/이론 정리
[자료 구조] 우선순위 큐(Priority Queue)와 힙(Heap)
all_sound 2022. 10. 10. 19:13우선선위 큐 (Priority Queue)
- 우선순위가 가장 높은 데이터를 먼저 삭제하는 자료구조
- 우선순위 큐는 데이터를 우선순위에 따라 처리하고 싶을 때 사용
- 예) 물건 데이터를 자료구조에 넣었다가 가치가 높은 물건부터 꺼내서 확인해야 하는 경우
▶ 우선순위 큐를 구현하는 방법은 다양하다.
1) 단순히 리스트를 이용하여 구현 가능
2) 힙(heap)을 이용하여 구현 가능
▶ 데이터의 개수가 N개일 때, 구현 방식에 따라서 시간 복잡도 비교
힙(Heap)의 특징
- 완전 이진 이트 자료구조의 일종
- 힙에서는 항상 루트 노트(rooot node)를 제거
- 최소힙(min heap) : 루트 노트가 가장 작은 값을 가지는 힙
- 최대힙(max heap) : 루트 노트가 가장 큰 값을 가지는 힙
▶ 완전 이진 트리 (Complete Binary Tree)
루트(root) 노드부터 시작하여 왼쪽 자식 노드, 오른쪽 자식 노드 순서대로 데이터가 차례대로 삽입되는 트리(tree)를 의미
▶ 최소 힙 구성 함수
Min-Heapify()
부모 노드로 거슬러 올라가며, 부모보다 자신의 값이 더 작은 경우에 위치를 교체한다. (상향식)
▶ 원소 삽입
새로운 원소가 삽입되었을 때 O(logN)의 시간 복잡도로 힙 성질을 유지하도록 할 수 있다.
▶ 원소 제거
원소가 제거되었을 때 O(logN)의 시간 복잡도로 힙 성질을 유지하도록 할 수 있다.
원소를 제거할 때는 가장 마지막 노드가 루트 노드의 위치에 오도록 함.
이후에 루트 노드에서부터 하향식으로(더 작은 자식 노드로) Heapify()를 진행
우선순위 큐 라이브러리를 활용한 힙 정렬 구현 (Python)
import sys
import heapq
input = sys.stdin.readline
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
n = int(input())
arr = []
for i in range(n):
arr.append(int(input()))
res = heapsort(arr)
for i in range(n):
print(res[i])
참고
https://www.youtube.com/watch?v=AjFlp951nz0&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=11
'DataStructure & Algorithm > 이론 정리' 카테고리의 다른 글
[자료 구조] Python 해시테이블(Hash Table)의 활용(Dictionary 반복문, 정렬 등) (0) | 2022.10.10 |
---|---|
그리디 알고리즘(탐욕법) / Greedy Algorithm (0) | 2022.10.10 |
Python 알고리즘의 성능 평가 (1) | 2022.10.10 |
[자료 구조] Queue (0) | 2022.10.03 |
[자료 구조] Stack (0) | 2022.10.02 |