You are on page 1of 8

MTODOS DE BUSCA EN RBOLES Y HASHING

METODO DE BUSQUEDA RBOL


Un rbol es una estructura de datos ampliamente usada que imita la forma de un rbol (un conjunto de nodos conectados). Un nodo es la unidad sobre la que se construye el rbol y puede tener cero o ms nodos hijos conectados a l. Se dice que un nodo es padre de un nodo si existe un enlace desde hasta (en ese caso, tambin decimos que es hijo de ). Slo puede haber un nico nodo sin padres, que llamaremos raz. Un nodo que no tiene hijos se conoce como hoja. Los dems nodos (tienen padre y uno o varios hijos) se les conoce como rama. Formalmente, podemos definir un rbol de la siguiente forma:

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

rbol de bsqueda binario auto-balanceable rboles AVL rboles Rojo-Negro rbol AA

rboles Multicamino
o

Ejemplo de rbol binario.

rboles B (Arboles de bsqueda multicamino autobalanceados) rbol-B+ rbol-B*

Operaciones de rboles. Representacin


Las operaciones comunes en rboles son:

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.

Uso de los rboles:


Usos comunes de los rboles son:

Representacin de datos jerrquicos. Como ayuda para realizar bsquedas en conjuntos de datos (ver tambin: algoritmos de bsqueda en rboles).

RBOLES DE BSQUEDA BINARIA


Un rbol binario es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y un hijo derecho. No pueden tener ms de dos hijos (de ah el nombre "binario"). Si algn hijo tiene como referencia a null, es decir que no almacena ningn dato, entonces este es llamado un nodo externo. En el caso contrario el hijo es llamado un nodo interno. Usos comunes de los rboles binarios son los rboles binarios de bsqueda, los montculos binarios y Codificacin de Huffman. Un rbol es una estructura de datos recursiva que se puede caracterizar en forma inductiva:

El rbol vaco es un rbol. Un nodo del cual cuelgan uno ms rboles es un rbol.

Implementacin de un arreglo asociativo con un rbol de bsqueda binaria


Representamos el arreglo asociativo mediante un objeto que tiene una referencia de la raz de un ABB:
class Map extends Program { Nodo raiz= null; ... operaciones del arreglo asociativo ... }

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"}:

Tipos de rboles binarios


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;

Estructura con arreglo indexado:


typedef struct tArbol { int clave; tArbol hIzquierdo, hDerecho; } tArbol; tArbol rbol[NUMERO_DE_NODOS];

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];

Mtodos para almacenar rboles binarios


Los rboles binarios pueden ser construidos a partir de lenguajes de programacin de varias formas. En un lenguaje con registros y referencias, los rboles binarios son construidos tpicamente con una estructura de nodos y punteros en la cual se almacenan datos, cada uno de estos nodos tiene una referencia o puntero a un nodo izquierdo y a un nodo derecho denominados hijos. En ocasiones, tambin contiene un puntero a un nico nodo. Si un nodo tiene menos de dos hijos, algunos de los punteros de los hijos pueden ser definidos como nulos para indicar que no dispone de dicho nodo. En la figura adjunta se puede observar la estructura de dicha implementacin.

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.

METODO DE BUSQUEDA HASHING


Hash: se refiere a una funcin o mtodo para generar claves o llaves que representen de manera casi unvoca a un documento, registro, archivo, etc., resumir o identificar un dato a travs de la probabilidad, utilizando una funcin hash o algoritmo hash. Un hash es el resultado de dicha funcin o algoritmo.

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

Arreglos anidados. Encadenamiento

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.