Comparador de colas de prioridad en Python

Abid Ullah 21 junio 2023
  1. Cola de prioridad en Python
  2. Comparador personalizado de cola de prioridad en Python
  3. Cola de prioridad usando la lista en Python
  4. Cola de prioridad usando el módulo heapdict en Python
Comparador de colas de prioridad en Python

Este artículo analizará el desarrollo de una cola de prioridad personalizada con Python. Además de eso, también aprenderemos cómo podemos utilizar una función de comparación personalizada con la cola de prioridad.

Cola de prioridad en Python

Una cola de prioridad es una estructura de datos que nos permite almacenar elementos con una determinada prioridad. La cola de prioridad ordenará los artículos de modo que el artículo con la prioridad más alta esté al principio de la cola.

Una cola de prioridad se usa a menudo en algoritmos en los que necesitamos procesar los elementos en orden de prioridad. Supongamos que estamos procesando una lista de tareas; querríamos procesar primero las tareas más importantes.

Podemos hacerlo usando una cola de prioridad.

Comparador personalizado de cola de prioridad en Python

El módulo incorporado cola en Python proporciona una implementación de cola de prioridad. Sin embargo, el módulo no nos permite especificar un comparador personalizado para la cola de prioridad.

Esto puede ser un problema si queremos usar un orden diferente para la cola de prioridad que el orden predeterminado.

Afortunadamente, existe una manera de crear un comparador personalizado para una cola de prioridad de Python. En este artículo veremos cómo hacerlo.

Exploraremos dos ejemplos de la cola de prioridad.

  1. Cola de prioridad usando la lista en Python
  2. Cola de prioridad usando el módulo heapdict de Python

Cola de prioridad usando la lista en Python

Para empezar, haremos una lista en blanco. Después de eso, agregaremos el nombre de cada persona a la lista en orden de importancia.

Partiremos de 1 y avanzaremos para ascender. Por lo tanto, a cada nombre se le asignará un número, sirviendo como prioridad en la lista.

La prioridad es un número entero que establece la secuencia en la que se realizarán las tareas cuando finalmente se completen.

Hagámoslo usando el código. En primer lugar, crearemos una lista llamada nombres.

Esta lista estará inicialmente vacía. Vea el código a continuación.

names = []

Ahora, para agregar nombres a la lista, usaremos el método agregar que es fácilmente accesible desde las funcionalidades de lista. El método agregar requiere que se envíen dos argumentos.

Agregue un número a la lista para indicar la prioridad, el número, el nombre o cualquier otra cosa. Para nuestros propósitos, nos gustaría que el nombre Abid apareciera en la posición 1 de la lista.

names.append((1, "Abid"))

No hay límite para el número de nombres o elementos que se pueden agregar, y los números de índice indicarán su orden de prioridad.

Código de ejemplo:

names.append((1, "Abid"))
names.append((4, "Jesica"))
names.sort(reverse=True)
names.append((3, "Anna"))
names.sort(reverse=True)
names.append((2, "Pat"))

Los registros de la lista de nombres se imprimirán cuando utilicemos el bucle while aquí.

while names:
    print(names.pop())

Este es el mismo código creado antes; cópialo y ejecútalo para ver los resultados.

names = []
names.append((1, "Abid"))
names.append((4, "Jesica"))
names.sort(reverse=True)
names.append((3, "Anna"))
names.sort(reverse=True)
names.append((2, "Pat"))
names.sort(reverse=True)
while names:
    print(names.pop())

Producción :

(1, 'Abid')
(2, 'Pat')
(3, 'Anna')
(4, 'Jesica')

Este es el resultado de ejecutar el código. Podemos ver claramente que cada nombre está ordenado según la prioridad y el índice que proporcionamos.

Cola de prioridad usando el módulo heapdict en Python

La cola de prioridad basada en un montón se hace accesible a través del módulo Python heapdict. Es comparable al módulo heapq normal pero ofrece una mayor variedad de capacidades y adaptabilidad.

Un montón binario es la base de la estructura de datos heapdict. Un montón binario es una estructura de datos que se puede usar para almacenar datos de una manera que facilita la recuperación y el cambio eficientes de esos datos.

El montón binario es un árbol binario completo, lo que indica que cada nodo del árbol tiene dos descendientes y el árbol en sí siempre está equilibrado.

HeapDict y HeapQueue son las dos clases principales disponibles por el módulo heapdict. La clase heapdict funciona de manera similar a un diccionario y mantiene su contenido en un montón.

Se usa un montón para contener la información administrada por la clase similar a una cola llamada HeapQueue. Las clases HeapDict y HeapQueue son subclases integradas de la clase dict.

Asumen todos los métodos de dict y ofrecen formas de interactuar con los montones, que heredan.

Tenga en cuenta que el módulo heapdict no se instalará automáticamente para nosotros. Tenemos que usar el comando que se muestra a continuación para configurar heapdict.

pip install heapdict

Después de completar la instalación de la biblioteca heapdict, ahora estamos listos para utilizarla en el proceso de implementación de la cola de prioridad.

  1. El primer paso es importar la librería de heapdict.
  2. Cree una variable que se usará para invocar la función heapdict y continúe usando la variable como prioridad.
  3. En este punto, usaremos la función que desarrollamos antes para asignar prioridades a cada tarea.
  4. Utilice un bucle while.
  5. Muestre el resultado imprimiendo la variable.

El código completo se puede escribir de la siguiente forma.

import heapdict

tasks = heapdict.heapdict()
tasks["Breakfast"] = 3
tasks["Wake up"] = 1
tasks["Get ready for work"] = 4
tasks["Exercise"] = 2
while tasks:
    print(tasks.popitem())

Producción :

('Wake up', 1)
('Exercise', 2)
('Breakfast', 3)
('Get ready for work', 4)

La salida del código demuestra que el código funciona correctamente según el orden de prioridad asignado a varias tareas en el código. La salida de nuestras actividades sigue el mismo orden e indica la prioridad adecuada.

Este artículo nos enseñó cómo crear una cola de prioridad utilizando una lista. Además de eso, seguimos los pasos necesarios para crear una cola de prioridad personalizada en Python.

Ahora sabemos cómo implementar una función de comparación personalizada con la cola de prioridad.

Esperamos que este artículo le resulte útil para comprender cómo crear una cola de prioridad personalizada en Python.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn