Prioritní fronty jsou abstraktní datové struktury, kde každá data/hodnota ve frontě má určitou prioritu. Například u leteckých společností dorazí zavazadla s názvem Business nebo First-class dříve než ostatní.
Prioritní fronta je rozšířením fronty s následujícími vlastnostmi.
- Prvek s vysokou prioritou je vyřazen z fronty před prvkem s nízkou prioritou.
- Pokud mají dva prvky stejnou prioritu, jsou obsluhovány podle pořadí ve frontě.
Rozličný aplikací z fronty priorit v informatice jsou:
Algoritmy plánování úloh, plánování CPU a disku, správa zdrojů, které jsou sdíleny mezi různými procesy atd.
Hlavní rozdíly mezi prioritní frontou a frontou:
podřetězec java string
- Ve frontě je nejstarší prvek vyřazen z fronty jako první. Zatímco ve frontě priority je prvek založený na nejvyšší prioritě vyřazen z fronty.
- Když prvky vyskočí z prioritní fronty, získaný výsledek se seřadí buď v rostoucím pořadí, nebo v sestupném pořadí. Zatímco při vyskakování prvků z jednoduché fronty se ve výsledku získá pořadí dat FIFO.
Níže je a jednoduchá implementace prioritní fronty.
Krajta
# 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())> |
>
napište json do souboru python
>Výstup:
12 1 14 7 14 12 7 1>
Všimněte si, že časová složitost odstranění je ve výše uvedeném kódu O(n). A lepší implementace je použít Binární halda který se obvykle používá k implementaci prioritní fronty. Všimněte si, že Python poskytuje heapq také v knihovně.
Time complexity: By using heap data structure to implement Priority Queues Insert Operation: O(log(n)) Delete Operation: O(log(n))>