El tipo abstracto de datos de los montículos en Haskell

Continuando la serie dedicada a los tipos de datos abstractos (TAD) en Haskell, hoy le toca el turno a los montículos

Un montículo (heap en inglés) es un árbol binario en el que los valores de cada nodo es menor o igual que los valores de sus hijos. Por ejemplo,

el de la izquierda es un montículo, pero el de la derecha no lo es.

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

  • la signatura del TAD de los montículos;
  • las propiedades del TAD de los montículos;
  • la implementación, en Haskell, de los montículos mediante tipos de datos algebraicos;
  • la comprobación con QuickCheck de sus propiedades y
  • la implementación de las colas de prioridad mediante montículos.

La signatura del TAD de los montículos

Las signatura de las operaciones del TAD de los montículos son las siguientes:

con el siguiente significado

  • vacio es el montículo vacío.
  • (inserta x m) es el montículo obtenido añadiendo el elemento x al montículo m.
  • (menor m) es el menor elemento del montículo m.
  • (resto m) es el montículo obtenido eliminando el menor elemento del montículo m.
  • (esVacio m) se verifica si m es el montículo vacío.
  • (valido m) se verifica si m es un montículo; es decir, es un árbol binario en el que los valores de cada nodo es menor o igual que los valores de sus hijos.

Propiedades del TAD de los montículos

Las propiedades son las siguientes:

  1. esVacio vacio
  2. valido (inserta x m)
  3. not (esVacio (inserta x m))
  4. not (esVacio m) ==> valido (resto m)
  5. resto (inserta x vacio) == vacio
  6. x <= menor m ==> resto (inserta x m) == m
  7. Si m es no vacío y x > menor m, entonces resto (inserta x m) == inserta x (resto m)
  8. esVacio m || esVacio (resto m) || menor m <= menor (resto m)

Implementación de los montículos mediante tipos de datos algebraicos

Propiedades de los montículos

Implementación de las colas de prioridad mediante montículos

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