El tipo abstracto de datos de las colas de prioridad en Haskell

En este artículo continúo la serie dedicada a los tipos de datos abstractos (TAD) en Haskell presentando el TAD de las colas de prioridad.

Una cola de prioridad (en inglés, priority queue) es una cola en la que cada elemento tiene asociada una prioridad y la operación de extracción siempre elige el elemento de menor prioridad. Un ejemplo de cola de prioridad es el formado por una lista de ciudades ordenadas por su distancia a un destino final.

El contenido del resto del artículo es el siguiente:

  • la signatura del TAD de las colas de prioridad;
  • las propiedades del TAD de las colas de prioridad;
  • la implementación, en Haskell, de las colas de prioridad mediante listas y
  • la comprobación con QuickCheck de sus propiedades.

Posteriormente, cuando se estudien los montículos, se presentará otra implementación de las colas de prioridad mediante montículos.

La signatura del TAD de las colas de prioridad

Las signatura de las operaciones del TAD de las colas prioridad son las siguientes:

con el siguiente significado

  • vacia es la cola de prioridad vacía.
  • (inserta x c) añade el elemento x a la cola de
    prioridad c.

  • (primero c) es el primer elemento de la cola de prioridad
    c.

  • (resto c) es el resto de la cola de prioridad c.
  • (esVacia c) se verifica si la cola de prioridad c
    es vacía.

  • (valida c) se verifica si c es una cola de prioridad
    válida.

Propiedades del TAD de las colas de prioridad

Las propiedades son las siguientes:

  1. inserta x (inserta y c) = inserta y (inserta x c)
  2. primero (inserta x vacia) = x
  3. Si x <= y, entonces primero (inserta y (inserta x c)) = primero (inserta x c)
  4. resto (inserta x vacia) = vacia
  5. Si x <= y, entonces resto (inserta y (inserta x c)) = inserta y (resto (inserta x c))
  6. esVacia vacia
  7. not (esVacia (inserta x c))

Implementación de las colas de prioridad mediante listas

Propiedades de las colas de prioridad

El objetivo de la serie es la elaboración de los temas de TAD del curso de Informática del Grado en Matemáticas.