Priority Queue

우선순위 큐는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저나온다.

  • 시뮬레이션 시스템 (ex) 출발시간, 대기시간, 소요시간

  • 네트워크 트래픽 제어

  • 운영 체제에서의 작업 스케쥴링

데이터를 근거로 우선순위를 판단해야하며, 목적에 맞게 우선순위를 정해야한다. 우선순위가 같은 데이터도 존재할 수 있다.

우선순위 큐에서 가장 중요한 연산은 **삽입(insert)과 삭제(delete)**이다.

구현방법

우선순위 큐는 3가지 방법으로 구현할 수 있다.

  1. 배열을 기반으로 구현

  2. 연결리스트를 기반으로 구현

  3. 힙(Heap)을 이용하는 방법

배열과 연결리스트

배열이나 연결리스트를 이용해서 구현하면 힙보다는 간단하게 구현할 수 있으나 단점이 있다.

배열

  • 데이터 삽입 및 삭제에서 데이터를 이동하는 연산을 계속해야한다. (당기거나 밀어야하는)

  • 삽입 위치를 찾기 위해서 배열에 저장된 모든 데이터와 우선순위를 비교해야한다.

연결리스트

  • 삽입 위치를 찾기위해서 모든 노드에 저장된 데이터와 우선순위를 비교해야한다.

데이터가 적은 경우에는 단점이 아닐 수도 있지만 데이터가 많아지면 비교할 대상이 많아져 성능이 저하된다.

  • 힙은 완전이진트리로 구현한다. 힙에 대한 자세한 설명은 힙(Heap) 게시물에서 했다.

이러한 성능차이로 주로 Heap을 이용해서 우선순위큐를 구현하는 것이 일반적이다.

Last updated