Python의 우선순위 대기열

우선순위 대기열 큐의 각 데이터/값이 특정 우선순위를 갖는 추상 데이터 구조입니다. 예를 들어 항공사에서는 비즈니스 또는 일등석이라는 제목의 수하물이 나머지 수하물보다 먼저 도착합니다.

우선순위 큐는 다음 속성을 가진 큐의 확장입니다.

  1. 우선순위가 높은 요소는 우선순위가 낮은 요소보다 먼저 대기열에서 제거됩니다.
  2. 두 요소의 우선순위가 동일한 경우 대기열의 순서에 따라 처리됩니다.
    다양한 애플리케이션 컴퓨터 과학의 우선순위 대기열은 다음과 같습니다.
    작업 스케줄링 알고리즘, CPU 및 디스크 스케줄링, 서로 다른 프로세스 간에 공유되는 리소스 관리 등

우선순위 대기열과 대기열의 주요 차이점:

  1. 대기열에서는 가장 오래된 요소가 먼저 대기열에서 제거됩니다. 우선순위 큐에서는 우선순위가 가장 높은 요소가 큐에서 제외됩니다.
  2. 요소가 우선순위 대기열에서 팝되면 얻은 결과는 오름차순 또는 내림차순으로 정렬됩니다. 반면, 단순 대기열에서 요소가 팝되면 결과에서 데이터의 FIFO 순서가 얻어집니다.

아래는 간단한 구현 우선순위 큐의.

파이썬




# A simple implementation of Priority Queue> # using Queue.> class> PriorityQueue(> object> ):> > def> __init__(> self> ):> > self> .queue> => []> > def> __str__(> self> ):> > return> ' '> .join([> str> (i)> for> i> in> self> .queue])> > # for checking if the queue is empty> > def> isEmpty(> self> ):> > return> len> (> self> .queue)> => => 0> > # for inserting an element in the queue> > def> insert(> self> , data):> > self> .queue.append(data)> > # for popping an element based on Priority> > def> delete(> self> ):> > try> :> > max_val> => 0> > for> i> in> range> (> len> (> self> .queue)):> > if> self> .queue[i]>> self> .queue[max_val]:> > max_val> => i> > item> => self> .queue[max_val]> > del> self> .queue[max_val]> > return> item> > except> IndexError:> > print> ()> > exit()> if> __name__> => => '__main__'> :> > myQueue> => PriorityQueue()> > myQueue.insert(> 12> )> > myQueue.insert(> 1> )> > myQueue.insert(> 14> )> > myQueue.insert(> 7> )> > print> (myQueue)> > while> not> myQueue.isEmpty():> > print> (myQueue.delete())>

산출:

12 1 14 7 14 12 7 1 

위 코드에서 삭제의 시간 복잡도는 O(n)입니다. ㅏ 더 나은 구현 사용하는 것입니다 바이너리 힙 이는 일반적으로 우선순위 큐를 구현하는 데 사용됩니다. Python은 다음을 제공합니다. 도서관에서도요.

Time complexity: By using heap data structure to implement Priority Queues Insert Operation: O(log(n)) Delete Operation: O(log(n))