Cola de prioridad en Python

Colas prioritarias son estructuras de datos abstractas donde cada dato/valor en la cola tiene una cierta prioridad. Por ejemplo, en las aerolíneas el equipaje con el título Business o First-class llega antes que el resto.

Priority Queue es una extensión de la cola con las siguientes propiedades.

  1. Un elemento con alta prioridad se retira de la cola antes que un elemento con baja prioridad.
  2. Si dos elementos tienen la misma prioridad, se sirven según su orden en la cola.
    Varios aplicaciones de la cola de Prioridad en Informática son:
    Algoritmos de programación de trabajos, programación de CPU y disco, gestión de recursos que se comparten entre diferentes procesos, etc.

Diferencias clave entre cola prioritaria y cola:

  1. En la cola, el elemento más antiguo se retira primero de la cola. Mientras que, en la cola de prioridades, un elemento basado en la prioridad más alta se retira de la cola.
  2. Cuando los elementos salen de una cola de prioridad, el resultado obtenido se ordena en orden creciente o en orden decreciente. Mientras que, cuando se extraen elementos de una cola simple, se obtiene un orden FIFO de datos en el resultado.

A continuación se muestra un implementación simple de la cola de prioridad.

Pitón




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

Producción:

12 1 14 7 14 12 7 1 

Tenga en cuenta que la complejidad temporal de la eliminación es O (n) en el código anterior. A mejor implementación es usar montón binario que normalmente se utiliza para implementar una cola de prioridad. Tenga en cuenta que Python proporciona montónq en la biblioteca también.

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