Professional Documents
Culture Documents
Caso base: un rbol con slo un nodo (es a la vez raz del rbol y hoja). Un nuevo rbol a partir de un nodo y rboles de races
con elementos cada uno, puede construirse estableciendo una relacin padre-hijo entre y cada una de las races de los rboles. El rbol resultante de nodos tiene como raz el nodo , los nodos son los hijos de y el conjunto de nodos hoja est formado por la unin de los conjuntos hojas inciales. A cada uno de los rboles se les denota ahora subrboles de la raz. Una sucesin de nodos del rbol, de forma que entre cada dos nodos consecutivos de la sucesin haya una relacin de parentesco, decimos que es un recorrido rbol. Existen dos recorridos tpicos para listar los nodos de un rbol: primero en profundidad y primero en anchura. En el primer caso, se listan los nodos expandiendo el hijo actual de cada nodo hasta llegar a una hoja, donde se vuelve al nodo anterior probando por el siguiente hijo y as sucesivamente. En el segundo, por su parte, antes de listar los nodos de nivel (a distancia aristas de la raz), se deben haber listado todos los de nivel . Otros recorridos tpicos del rbol son preorden, postorden e inorden:
El recorrido en preorden, tambin llamado orden previo consiste en recorrer en primer lugar la raz y luego cada uno de los hijos en orden previo. El recorrido en inorden, tambin llamado orden simtrico (aunque este nombre slo cobra significado en los rboles binarios) consiste en recorrer en primer lugar , luego la raz y luego cada uno de los hijos en orden simtrico. El recorrido en postorden, tambin llamado orden posterior consiste en recorrer en primer lugar cada uno de los hijos raz. en orden posterior y por ltimo la
Finalmente, puede decirse que esta estructura es una representacin del concepto de rbol en teora de grafos. Un rbol es un grafo conexo y acclico.
Tipos de rboles
rboles Binarios
o
rboles Multicamino
o
Enumerar todos los elementos. Buscar un elemento. Dado un nodo, listar los hijos (si los hay). Borrar un elemento. Eliminar un subrbol (algunas veces llamada podar). Aadir un subrbol (algunas veces llamada injertar). Encontrar la raz de cualquier nodo.
Por su parte, la representacin puede realizarse de diferentes formas. Las ms utilizadas son:
Representar cada nodo como una variable en el heap, con punteros a sus hijos y a su padre. Representar el rbol con un array donde cada elemento es un nodo y las relaciones padre-hijo vienen dadas por la posicin del nodo en el array.
Representacin de datos jerrquicos. Como ayuda para realizar bsquedas en conjuntos de datos (ver tambin: algoritmos de bsqueda en rboles).
El rbol vaco es un rbol. Un nodo del cual cuelgan uno ms rboles es un rbol.
Cuando el arreglo est vaco, la raz es nula y representa entonces el rbol vaco. Cuando el arreglo tiene al menos una asociacin, la raz no es nula y referencia un objeto de la clase Nodo que se define como:
class Nodo { int llave; String val; Nodo izq; Nodo der; Nodo(int llave, String val, Nodo izq, Nodo der) { this.llave= llave; this.val= val; this.izq= izq; this.der= der; } }
En donde izq referencia la raz del ABB izquierdo, o nulo si el ABB vaco, y der referencia respectivamente el ABB derecho. Un nodo almacena una asociacin (llave, val), al igual que en una lista enlazada un eslabn almacena un asociacin del arreglo asociativo.
La siguiente figura muestra dos posibles representaciones de un arreglo asociativo con asociaciones {3->"hola", 5->"que", 10->"tal"}:
Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos. Un rbol binario lleno es un rbol en el que cada nodo tiene cero o dos hijos. Un rbol binario perfecto es un rbol binario lleno en el que todas las hojas (vrtices con cero hijos) estn a la misma profundidad (distancia desde la raz, tambin llamada altura). A veces un rbol binario perfecto es denominado rbol binario completo. Otros definen un rbol binario completo como un rbol binario lleno en el que todas las hojas estn a profundidad n o n-1, para alguna n.
Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. En un rbol binario cada nodo puede tener cero, uno o dos hijos (subrboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.
Implementacin en C
Un rbol binario puede declararse de varias maneras. Algunas de ellas son: Estructura con manejo de memoria dinmica, siendo puntA el puntero que apunta al rbol de tipo tArbol:
typedef struct nodo { int clave; struct nodo *izdo, *dcho; }Nodo;
En el caso de un rbol binario casi-completo (o un rbol completo), puede utilizarse un sencillo arreglo de enteros con tantas posiciones como nodos deba tener el rbol. La informacin de la ubicacin del nodo en el rbol es implcita a cada posicin del arreglo. As, si un nodo est en la posicin i, sus hijos se encuentran en las posiciones 2i+1 y 2i+2, mientras que su padre (si tiene), se encuentra en la posicin truncamiento ((i-1)/2) (suponiendo que la raz est en la posicin cero). Este mtodo se beneficia de un almacenamiento ms compacto y una mejor localidad de referencia, particularmente durante un recorrido en preorden. La estructura para este caso sera por tanto:
int rbol[NUMERO_DE_NODOS];
Los rboles binarios tambin pueden ser almacenados como una estructura de datos implcita en vectores, y si el rbol es un rbol binario completo, este mtodo no desaprovecha el espacio en memoria. Tomaremos como notacin la siguiente: si un nodo tiene un ndice i, sus hijos se encuentran en ndices 2i + 1 y 2i + 2, mientras que sus padres (si los tiene) se encuentra en el ndice (partiendo de que la raz tenga ndice cero). Este mtodo tiene como ventajas el tener almacenados los datos de forma ms compacta y por tener una forma ms rpida y eficiente de localizar los datos en particular durante un preorden transversal. Sin embargo, desperdicia mucho espacio en memoria.
FUNCION HASH
Es una funcin para resumir o identificar probabilsticamente un gran conjunto de informacin, dando como resultado un conjunto imagen finito generalmente menor. Varan en los conjuntos de partida y de llegada y en cmo afectan a la salida similitudes o patrones de la entrada.
VENTAJAS:
Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fciles de localizar. Se logra independencia lgica y fsica, debido a que los valores de las llaves son independientes del espacio de direcciones. No se requiere almacenamiento adicional para los ndices.
DESVENTAJAS:
El archivo no est clasificado. No permite llaves repetidas. Solo permite acceso por una sola llave. Tiempo de procesamiento requerido para la aplicacin de la funcin hash.
ALGORITMO HASHING
Algoritmo que se utiliza para generar un valor de hash para algn dato, como por ejemplo claves. Un algoritmo de hash hace que los cambios que se produzcan en los datos de entrada provoquen cambios en los bits del hash. Gracias a esto, los hash permiten detectar si un dato ha sido modificado.
FUNCIONES DE HASH
Funcin hash por mdulo: divisin. Funcin hash cuadrado. Funcin hash por plegamiento. Funcin hash por truncamiento. Soluciones de colisiones. Reasignacin, Doble direccin hash
OPERACIONES BSICAS
Insercin (llave, valor) bsqueda (llave) que devuelve valor La mayora de las implementaciones tambin incluyen borrar (llave). Tambin se pueden ofrecer funciones como iteracin en la tabla, crecimiento y vaciado. Algunas tablas hash permiten almacenar mltiples valores bajo la misma clave. Para usar una tabla hash se necesita: Una estructura de acceso directo (normalmente un array). Una estructura de datos con una clave Una funcin resumen (hash) cuyo dominio sea el espacio de claves y su imagen (o rango) los nmeros naturales.
INSERSION
Para almacenar un elemento en la tabla hash se ha de convertir su clave a un nmero. Esto se consigue aplicando la funcin resumen a la clave del elemento. El resultado de la funcin resumen ha de mapearse al espacio de direcciones del array que se emplea como soporte, lo cual se consigue con la funcin modulo. Tras este paso se obtiene un ndice vlido para la tabla. El elemento se almacena en la posicin de la tabla obtenido en el paso anterior.
BUSQUEDA
Para recuperar los datos, es necesario nicamente conocer la clave del elemento, a la cual se le aplica la funcin resumen. El valor obtenido se mapea al espacio de direcciones de la tabla. Si el elemento existente en la posicin indicada en el paso anterior tiene la misma clave que la empleada en la bsqueda, entonces es el deseado. Si la clave es distinta, se ha de buscar el elemento segn la tcnica empleada para resolver el problema de las colisiones al almacenar el elemento.
HASHING ABIERTO
Suposicin de hashing uniforme: es cuando cualquier elemento es igualmente probable de caer en cualquiera de las m entradas de la tabla hash, independientemente de cualquier otro elemento. Desde un gran Universo slo un nmero reducido de claves sern consideradas.
HASHING CERRADO
En Hashing cerrado, todos los elementos o claves son almacenadas en la tabla hashing misma. Es decir, cada entrada de la tabla contiene un elemento del conjunto dinmico o NULL.