„Python“ prioritetinė eilė

Prioritetinės eilės yra abstrakčios duomenų struktūros, kuriose kiekvienas eilės duomenims/reikšmei suteikiamas tam tikras prioritetas. Pavyzdžiui, oro linijose bagažas, pavadintas Verslo arba Pirmos klasės, atkeliauja anksčiau nei kiti.

Prioritetinė eilė yra eilės plėtinys su šiomis savybėmis.

  1. Aukšto prioriteto elementas ištraukiamas prieš elementą, kurio prioritetas žemas.
  2. Jei du elementai turi tą patį prioritetą, jie pateikiami pagal eilę.
    Įvairūs programos Informatikos prioritetų eilės yra:
    Darbo planavimo algoritmai, procesoriaus ir disko planavimas, įvairių procesų bendrinamų išteklių valdymas ir kt.

Pagrindiniai prioritetų eilės ir eilės skirtumai:

  1. Eilėje pirmiausia pašalinamas seniausias elementas. Prioritetinėje eilėje elementas, pagrįstas aukščiausiu prioritetu, ištraukiamas iš eilės.
  2. Kai elementai iškeliami iš prioritetinės eilės, gautas rezultatas rūšiuojamas didėjančia arba mažėjimo tvarka. Kai elementai iškeliami iš paprastos eilės, rezultate gaunama FIFO duomenų tvarka.

Žemiau yra a paprastas įgyvendinimas prioritetinės eilės.

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

Išvestis:

12 1 14 7 14 12 7 1 

Atkreipkite dėmesį, kad ištrynimo sudėtingumas aukščiau pateiktame kode yra O (n). A geresnis įgyvendinimas yra naudoti Dvejetainė krūva kuris paprastai naudojamas prioritetinei eilei įgyvendinti. Atminkite, kad Python suteikia heapq bibliotekoje taip pat.

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