Árboles Binarios y Algoritmos de Ordenación: Conceptos y Ejemplos

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 32,39 KB

Definiciones de Árboles Binarios

Árbol Equilibrado

Un árbol es equilibrado si:

Árbol Perfectamente Equilibrado

Un árbol está perfectamente equilibrado si:

Árbol Binario Completo

Un árbol binario completo es un árbol en el que hasta el penúltimo nivel tiene el máximo número de nodos posibles y en el último nivel todos los nodos están colocados de izquierda a derecha sin dejar huecos.

Árbol Binario Lleno

Un árbol binario es lleno si todos los nodos del árbol tienen:

hijos excepto los del último nivel.

Recorridos de Árboles Binarios

Hay tipos.

Recorrido en Anchura

Se recorren todos los niveles empezando por el nivel y cada nivel de izquierda a derecha.

Recorrido en Profundidad

Los prefijos pre, en, post hacen referencia a cuándo se visita al padre.

  • Preorden: Primero se visita al padre, después al hijo izquierdo y después al hijo derecho.
  • Enorden: Se visita al hijo izquierdo, luego al padre y luego al derecho.
  • Postorden: Se visita al hijo izquierdo, después al hijo derecho y después al padre.

Árbol Binario de Búsqueda

Un árbol binario de búsqueda es un árbol binario en el que para todo nodo del árbol todo lo que está a la izquierda es menor y todo lo que está a la derecha es mayor.

Árboles AVL

Un árbol AVL es un árbol binario de búsqueda equilibrado.

Ejemplo de Construcción de un Árbol AVL

Dada la lista construir el árbol AVL.

Si vamos insertando enseguida obtenemos un árbol que no es AVL. Necesitamos aplicar una operación que nos permita construir un AVL. Estas operaciones son las rotaciones. Hay 4 que se explican debajo. Al insertar el surge el primer problema que se resuelve con la rotación 1). Al insertar el debemos aplicar la rotación 2). Al insertar el 7 también necesito efectuar la misma rotación. Seguimos insertando sin problema hasta llegar al nodo 15 en el que hay que emplear la rotación 3).

Rotaciones en Árboles AVL

Solo tenemos que examinar los caminos de búsqueda del nodo que acabamos de insertar. El camino de búsqueda son los nodos que van del nodo raíz al nodo que acabamos de insertar.

Rotación Simple Derecha

Ocurre en este caso: Cuando y con subárboles y pueden ser vacíos. Resulta el árbol equivalente de la derecha pero que sí es AVL.

Rotación Simple Izquierda

Cuando y con subárboles y pueden ser vacíos. Se aplica esta rotación obteniendo el AVL de la derecha.

Rotación Doble Izquierda

Habíamos visto que los dos eran positivos o los dos eran negativos. Sin embargo ahora tenemos que y . Aplicamos esta rotación en la que ahora hay que identificar tres nodos.

Rotación Doble Derecha

Habíamos visto que los dos eran positivos o los dos eran negativos. Sin embargo ahora tenemos que y . Aplicamos esta rotación en la que ahora hay que identificar tres nodos.

Borrado de Nodos en Árboles AVL

Si borro el por ejemplo deja de ser un árbol AVL. Podría aplicar una rotación. El 3 se queda con factor de equilibrio 2 y el con factor de equilibrio . No cuadra con ninguna rotación pero si aplico la rotación simple izquierda o la rotación doble izquierda que son las que más se parecen porque la raíz tiene factor de equilibrio 2 conseguimos un AVL.

Algoritmos de Ordenación

Los algoritmos de ordenación ordenan un conjunto de datos de acuerdo a uno de los campos. Ejemplo: en una guía telefónica los campos de cada individuo son el nombre del individuo y su número de teléfono, puedo ordenarla alfabéticamente o poniendo sus números en orden. Como vemos en el ejemplo la ordenación puede ser numérica o alfabética.

Tipos de Ordenación

  • Externa: si lo que se ordena es un archivo.
  • Interna: si es un TAD que tenemos en el propio programa.

Vamos a ver tres tipos de algoritmos básicos:

  • Algoritmo de selección.
  • Algoritmo de inserción.
  • Algoritmo de burbuja.

Y tres algoritmos complejos:

  • Heapsort.
  • Quicksort.
  • Mergesort.

Algoritmo de Selección

Supongamos que queremos ordenar . Buscamos el más pequeño (el 2) lo cambiamos con el primero (el 9). Volvemos a hacer lo mismo pero solo cogiendo los últimos números. Cuando encontramos el mínimo (el 5) cambiamos el segundo (el 9) con el mínimo que hayamos encontrado. Seguimos hasta terminar.

Algoritmo de Inserción

Supongamos que queremos ordenar . Metemos el primer elemento en la parte ordenada. Sacamos el segundo elemento de la parte desordenada y lo comparamos de atrás hacia adelante la parte ordenada. Si el primero es mayor lo pongo a la izquierda, si el segundo es mayor lo pongo a la derecha. En nuestro ejemplo: . etc. En general mientras haya elementos en la parte ordenada, saco uno y lo comparo con el último de la parte ordenada, si el que he sacado es mayor que el último de la parte ordenada lo pongo ahí, si no lo comparo con el anterior, etc. Si llego al final lo pongo el primero en la parte ordenada.

Ejercicio: Un vector contiene los siguientes 6 elementos . Los dos primeros elementos se han ordenado utilizando el algoritmo de inserción. ¿Cuál será el estado del vector después de tres pasadas más del algoritmo de inserción? .

Algoritmo de Burbuja

Se compara el primer elemento con el segundo. Si el primero es menor se queda igual. Si es mayor se intercambian. Después el segundo con el tercero etc. Contamos los intercambios que ha habido y si ha habido 0 la lista está ordenada. Si no tenemos que volver a repetirlo.

Ejercicio: ¿Cuántas pasadas realiza el algoritmo de burbuja para ordenar la siguiente lista ?

Ejercicio: Tenemos el siguiente vector: . Después de dos pasadas de un algoritmo de ordenación el vector queda de la siguiente forma: ¿Qué algoritmo se ha utilizado? Es el de selección.

Entradas relacionadas: