El tipo abstracto de datos de los árboles binarios de búsqueda en Haskell

Continuando la serie dedicada a los tipos de datos abstractos (TAD) en Haskell, hoy le toca el turno a los árboles binarios de búsqueda.

Un árbol binario de búsqueda (ABB) (binary search tree en inglés) es un árbol binario tal que el valor de cada nodo es mayor que los valores de su subárbol izquierdo y es menor que los valores de su subárbol derecho y, además, ambos subárboles son árboles binarios de búsqueda. Por ejemplo, al almacenar los valores de [2,3,4,5,6,8,9] en un ABB se puede obtener los siguientes ABB:

El objetivo principal de los ABB es reducir el tiempo de acceso a los valores.

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

  • la signatura del TAD de los árboles binarios de búsqueda;
  • las propiedades del TAD de los árboles binarios de búsqueda;
  • la implementación, en Haskell, de los árboles binarios de búsqueda mediante tipos de datos algebraicos.
  • la comprobación con QuickCheck de sus propiedades.

La signatura del TAD de los árboles binarios de búsqueda

Las signatura de las operaciones del TAD de los árboles binarios de búsqueda son las siguientes:

con el siguiente significado

  • vacio es el ABB vacío.
  • (pertenece v a) se verifica si v es el valor de algún nodo del ABB a.
  • (inserta v a) es el árbol obtenido añadiendo el valor v al ABB a, si no es uno de sus valores.
  • (crea vs) es el ABB cuyos valores son vs.
  • (elementos a) es la lista de los valores de los nodos del ABB en el recorrido inorden.
  • (elimina v a) es el ABB obtenido eliminando el valor v del ABB a.
  • (menor a) es el mínimo valor del ABB a.
  • (valido a) se verifica si a es un ABB correcto.

Propiedades del TAD de los árboles binarios de búsqueda

Las propiedades son las siguientes:

  1. valido vacio
  2. valido (inserta v a)
  3. inserta x a /= vacio
  4. pertenece x (inserta x a)
  5. not (pertenece x vacio)
  6. pertenece y (inserta x a) == (x == y) || pertenece y a
  7. valido (elimina v a)
  8. elimina x (inserta x a) == elimina x a
  9. valido (crea xs)
  10. elementos (crea xs) == sort (nub xs)
  11. pertenece v a == elem v (elementos a)
  12. Para todo x de elementos a, (menor a <= x)

Implementación de los árboles binarios de búsqueda mediante tipos de datos algebraicos

Propiedades de los árboles binarios de búsqueda

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