Coada prioritară în Python

Cozi prioritare sunt structuri de date abstracte în care fiecare dată/valoare din coadă are o anumită prioritate. De exemplu, în companiile aeriene, bagajele cu titlul Business sau First-class ajung mai devreme decât restul.

Priority Queue este o extensie a cozii cu următoarele proprietăți.

  1. Un element cu prioritate mare este scos din coadă înaintea unui element cu prioritate scăzută.
  2. Dacă două elemente au aceeași prioritate, acestea sunt servite în funcție de ordinea lor în coadă.
    Variat aplicatii din coada de priorități în informatică sunt:
    Algoritmi de planificare a joburilor, programare CPU și disc, gestionarea resurselor care sunt partajate între diferite procese etc.

Diferențele esențiale dintre Coada prioritară și Coadă de așteptare:

  1. În coadă, cel mai vechi element este scos din coadă mai întâi. În timp ce, în Priority Queue, un element bazat pe cea mai mare prioritate este scos din coadă.
  2. Când elementele sunt scoase dintr-o coadă de prioritate, rezultatul obținut este fie sortat în ordine crescătoare, fie în ordine descrescătoare. În timp ce, atunci când elementele sunt scoase dintr-o coadă simplă, se obține o ordine FIFO a datelor în rezultat.

Mai jos este a implementare simplă a cozii de prioritate.

Piton




# 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]>>>> :> > myQueue> => PriorityQueue()> > myQueue.insert(> 12> )> > myQueue.insert(> 1> )> > myQueue.insert(> 14> )> > myQueue.insert(> 7> )> > print> (myQueue)> > while> not> myQueue.isEmpty():> > print> (myQueue.delete())>

Ieșire:

12 1 14 7 14 12 7 1 

Rețineți că complexitatea de timp a ștergerii este O(n) în codul de mai sus. A implementare mai bună este de a folosi Heap binar care este de obicei folosit pentru a implementa o coadă de prioritate. Rețineți că Python oferă heapq si in biblioteca.

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