Prioritný front v Pythone

Prioritné fronty sú abstraktné dátové štruktúry, kde každý údaj/hodnota vo fronte má určitú prioritu. Napríklad v leteckých spoločnostiach prichádza batožina s názvom Business alebo First-class skôr ako ostatné.

Prioritný front je rozšírenie frontu s nasledujúcimi vlastnosťami.

  1. Prvok s vysokou prioritou je vyradený pred prvok s nízkou prioritou.
  2. Ak majú dva prvky rovnakú prioritu, obslúžia sa podľa poradia vo fronte.
    Rôzne aplikácie z frontu priorít v informatike sú:
    Algoritmy plánovania úloh, plánovanie CPU a diskov, správa zdrojov, ktoré sú zdieľané medzi rôznymi procesmi atď.

Hlavné rozdiely medzi prioritným frontom a frontom:

  1. Vo fronte je najstarší prvok vyradený ako prvý. Zatiaľ čo v Priority Queue je prvok založený na najvyššej priorite vyradený.
  2. Keď prvky vyskočia z prioritného frontu, získaný výsledok sa zoradí buď v rastúcom alebo klesajúcom poradí. Zatiaľ čo keď sú prvky vyskakované z jednoduchého frontu, vo výsledku sa získa poradie údajov FIFO.

Nižšie je a jednoduchá implementácia prioritného frontu.

Python




# 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())>

Výkon:

12 1 14 7 14 12 7 1 

Všimnite si, že časová zložitosť vymazania je O(n) vo vyššie uvedenom kóde. A lepšia implementácia je použiť Binárna halda ktorý sa zvyčajne používa na implementáciu prioritného frontu. Všimnite si, že Python poskytuje heapq aj v knižnici.

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