logo

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.

prechod predobjednávky
  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

js pole




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

referenčná premenná v jazyku Java
>

akú veľkosť mám monitor
>

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