✅우선순위 큐

이상민·2023년 5월 19일
0

알고리즘

목록 보기
4/128

✔우선순위 큐란?

  • 큐나 스택과 비슷한 자료형이지만, 각 원소들은 우선순위를 가지고 있다.
  • 우선순위 큐에서, 높은 우선순위를 가진 원소는 낮은 우선순위를 가진 원소보다 먼저 처리된다.
  • 같은 우선순위를 가진다면, 먼저 들어온 원소를 처리한다.
  • 우선순위 큐는 힙(heap)이라는 자료 구조를 통해 구현할 수 있다.
  • 시간복잡도는 O(logN)이다.

✔힙이란?

  • 완전 이진 트리(Complete Binary Tree)로, 부모 노드의 값이 항상 자식 노드들의 값보다 크거나(Max Heap), 작아야(Min Heap) 한다.
  • 힙은 우선순위 큐를 구현하거나, 힙 정렬을 하는 데 사용된다.
  • 루트 노드에 있는 값이 최대값, 혹은 최소값이며, 자식 노드들의 값의 위치는 기본적인 조건만 맞추면 된다.

heapq

  • 파이썬에서는 우선순위 큐를 부모 노드 값이 항상 자식 노드들의 값 보다 작은 Min Heap을 사용한다.
    root 노드의 값이 가장 작다.
  • queue의 PriorityQueue보다 heapq가 처리속도가 빠르므로 heapq를 사용한다.
  • heapq 리스트의 0번째 인덱스에는 항상 root 노드의 값이 들어간다.

👉heapq 사용법

  • 먼저 빈리스트를 만든다. pq = []
  • heapq.heappush(pq, 123) // pq에 값을 넣는 메서드
  • heapq.heappop(pq) //pq에 값을 빼는 메서드
    heappop()메서드 사용시, heapq에 root노드 값이 삭제된다.

👉heapq 예시

import heapq

pq = []
heapq.heappush(pq, 6)
heapq.heappush(pq, 12)
heapq.heappush(pq, 0)
heapq.heappush(pq, -5)
heapq.heappush(pq, 8)
print(pq)
while pq:
    print(pq[0])		//root 노드 출력
    heapq.heappop(pq)	//root 노드 삭제
[-5, 0, 6, 12, 8]
-5
0
6
8
12
profile
개린이

0개의 댓글