Python & 알고리즘
우선순위 큐(Priority Queue), 힙(Heap)
집못가는프로그래머
2021. 9. 6. 02:23
◎우선순위 큐(Priority Queue)
스택(Stack) : LIFO - 마지막에 들어간 요소가 가장 먼저 나온다
큐(Queue) : FIFO - 처음 들어간 요소가 가장 먼저 나온다
↑ 스택과 큐가 위와 같은 특징이 있다면
우선순위 큐(Priority Queue)는 입력 순서와 상관 없이 가장 우선순위가 높은 데이터가 가장 먼저 나오게 된다.
◎힙(Heap)
<시간복잡도>
삽입 : O(logn)
삭제 : O(logn)
<형태>
완전 이진 트리의 일종으로 우선순위 큐를 위해 만들어진 자료구조
*완전 이진트리 : 노트 1개당 자식노드 2개를 유지하는 형태
최대 힙 : 부모 노드 값 >= 자식 노드 값
최소 힙 : 부모 노드 값 <= 자식 노드 값
부모노드 인덱스 = 자식노드 인덱스 / 2
왼쪽 자식노드 인덱스 = 부모노드 인덱스 * 2
오른쪽 자식노드 인덱스 = 부모노드 인덱스 * 2 + 1
<Python 코딩> :
import heapq
heapq.heapify( 리스트 ) < 리스트를 힙구조로 변환
heapq.heappush( 리스트, 값) < 값 추가 (힙구조로 재 변환)
heapq.heappop(리스트) < 최소값 추출 및 삭제 (힙구조로 재 변환)