Anda di halaman 1dari 9

J.L.R.

Arboles Generalidades Arbol: Conjunto de elementos llamadas nodos, este conjunto puede estar vacio o sino esta vacio contiene un nodo distinguido r llamada raiz del arbol y cero o mas subrboles Ar,....AR, cuyas raices estan conectadas por medio de una arista o rama dirigida.
T. D. A. rbol Definicin recursiva de rbol
Sean T1,...., Tk arboles con races n1, n2, ....., nk respectivamente. Sea el n nodo, si unimos n a los nodos n1, n2,...., nk obtenemos un nico rbol T de raz n.

T1,...., Tk son subarboles de n. Los nodos n1, n2,...., nk son descendientes directos de n; (o hijos ). En general si x es un nodo que ocupa el nivel i, sus descendiente directo ocupan el nivel i + 1.

Tipos de Representacin
Se pueden representar los arboles de dos formas a travs de punteros o con cursor

La longitud de camino de un nodo


Vimos que la longitud de caminos de un nodo coincide con el nivel que ocupa ese nodo dentro del rbol que equivale a la siguiente pregunta, cuantas comparaciones se deben hacer para ubicar el nodo Altura del rbol: la mxima longitud de camino es el mximo de entre los niveles de los nodos Grado de un Nodo: Es la cantidad de descendientes directo de un nodo. Grado de un rbol: Es la cantidad de descendientes directo de un nodo.

rbol binario
De ahora en mas trabajaremos con arboles de grado dos o binario Definicin: un rbol binario es aquel que es un rbol vaco o en el que cada nodo tiene ningn hijo, un hijo o 2 hijos. 1

J.L.R.R Por definicin un nodo sin descendiente se lo llama hoja o nodo terminal los que tiene uno o dos descendientes, nodos internos o no terminales.

rbol Ordenado
Un rbol es ordenado cuando para cada nodo existe un orden en sus subarboles

DISTINTO DE Un rbol ordenado no siempre ser binario al igual que un binario no ser ordenado. Al trabajar este TDA uno de los objetivo es minimizar la cantidad mxima de comparaciones al buscar elementos, para ello de ahora en mas trabajaremos con rbol binario ordenado de bsqueda. Dato Objeto
Type punt = ^nodo; nodo = Record info : tipo_informacion; cont : integer; izq : punt; der : punt; end; var raiz : punt; Procedure insertar (var xp:punt; xx:info); begin if xp = nil then begin new (xp); xp^.info := xx; xp^.izq := nil; xp^.der := nil; end; else if xx > xp^.info then insertar(xp^.der, xx) else if xx < xp^.info then insertar (xp^.izq,xx) else inc (xp^.cont); end; Procedure crear (var xp:punt); begin xp:=nil; end;

Procedure inorden (xp:punt); begin if xp <> nil then begin inorden (xp^.izq); writeln (xp^.info); inorden (xp^.der); end; end;

Para controlar el crecimiento de un rbol se trabaja con rbol equilibrado o balanceado

Definicin de rbol balanceado


Un rbol es balanceado si cada nodo cumple con la siguiente propiedad, la altura de sus subarboles difieren a lo sumo en 1.

Definicin de rbol perfectamente balanceado


Un rbol esta perfectamente balanceado si cada nodo cumple con la siguiente propiedad: La cantidad de nodo de su subarbol izquierdo difiere a lo sumo en 1 de la cantidad de nodo de su subarbol derecho. 2

J.L.R.R dato objeto Type balance = -1..1; punt = ^nodo; nodo = Record info : tipo_informacion; cont : integer; bal : balance; izq : punt; der : punt; end; Al pretender mantener un rbol equilibrado o balanceado el caso mas complicado (caso 2) es el siguiente: Aquel nodo que arroja desbalanceo se lo reemplaza por el mayor de sus menores (creci la rama izquierda) o el menor de sus mayores (creci la rama derecha). El caso mas simple (caso 1) el nodo que arroja desequilibrio se lo reemplaza por su hijo izquierdo (creci la rama izquierda) o por sus hijo derecho (si creci la rama derecha). CASO 1

SOLUCIN

SOLUCIN EJEMPLO

SOLUCIN

J.L.R.R CASO 2

SOLUCIN

SOLUCIN EJEMPLO

SOLUCIN

J.L.R.R

rbol B (Bayer) de Orden n


Al trabajar con arboles de gran escala la principal desventaja es mantener la informacin en memoria secundaria por Ej. si procesamos 10000 registros o nodos la cantidad mxima de accesos a memoria secundaria es Log2 10000. La idea de rbol B o multicaminos es agrupar en un numero prefijado de nodos de tal forma que al acceder a memoria secundaria no ubicamos individualmente a una clave, sino que ubicamos a un grupo de claves. Los arboles B tambin son llamados multicaminos porque un grupo de claves tiene varios descendientes. Llamaremos paginas a un grupo de claves.

Caractersticas de cada pagina


1. Cada pagina puede tener como mnimo n claves a exencin la raiz puede tener 1 elemento. 2. Cada pagina puede tener como mximo 2 * n claves. (n =< M (numero de elementos)<= 2 * n) 3. Al numero de claves en una pagina lo llamaremos m, la cantidad de descendientes de cada pagina es m + 1. (Toda pagina es o una pagina hoja, o tiene m + 1 descendientes siendo m la cantidad de claves de la pagina n <= m <= 2 * n). Toda pagina es pagina hoja (no tiene descendiente) o tiene m+ 1 descendiente, siendo m la cantidad de claves de esa pagina. 4. Todas las paginas hojas figuran en el mismo nivel. 5. Este rbol crece desde sus hojas hacia la raiz.

type punt : ^pagina; pagina = Record po : punt; puntero m : integer; numero de elementos claves : array [1.. 2 * n] of item; end; item = Record k : integer; dato cualquiera p : punt; puntero cont : integer; contador end; Como vamos de mayor a menor a menor en cada pagina vemos que cada puntero apunta a otra pagina que contiene las claves mayores de donde l a salido y menores que las claves que estn a la derecha. po apunta a la pagina que contiene todas las claves menores que K1 y el puntero que acompaa a Km apunta a una pagina que contiene todas las claves mayores que a Km.

J.L.R.R

J.L.R.R

Hashing
La mayora de los problemas que se nos presenta tienen los siguientes inconvenientes, conocemos aproximadamente los valores en cuanto a su cardinalidad y adems solo conocemos limite inferior y superior del mismo el ejemplo a citar seria los DNI de los alumnos de segundo y tercer ao. Supongamos tener como limite inferior y superior a 20 millones y 25 millones y los alumnos de ambos grupos no suman mas de 150. Seria imposible reservar espacio de memoria para almacenar el milln de datos cuando en realidad sera suficiente 200 entradas a la tabla. De esta forma sacrificamos la biyeccin y trabajamos con la sobreyectividad esto implica que dos claves diferentes pretendan ocupar el mismo lugar de memoria, cuando se produce esta situacin diremos que se a registrado una colisin o que K1 y K2 son colisionantes o K1 y K2 son sinnimos porque pretenden ocupara un mismo lugar. Hashing trabaja de la siguiente forma: citada una clave K aplicamos una funcin hash H y obtenemos como resultado una entrada D que es la ubicacin en la tabla que pretende ocupar. inyectiva K1 K2 H (K1 ) H (K2 ) biyectiva x d D k K / H (K) = D H : K ------> D K = { ki / 000 <= ki <= 999} D = { di / 000 <= di <= 999}

1) Eleccin de la funcin hash (H) Divisin H (K) = K mod M M tamao de la tabla en lo posible M primo Plegado K = d8 d7 | d6 d5 d4 | d3 d2 d1 + d8 d7 d6 d5 d4 d3 d2 d1 direccin

Extraccin Extraer los dgitos que varan mas aleatoriamente Cuadrado medio H (K) = K2 extraer dgitos centrales Claves alfanumricas K= C3 C2 C1 C= carcter H (K) = ord (C3) + ord (C2) + ord (C1) mejora H (K) = ord (C3) * b + ord (C2) * b2 + ord (C1) * b3 Es principal problema es la colisin y para ello existen polticas de trato de las mismas, se podran dividir dos grandes grupos las cuales son Hashing Abierto y Hashing Cerrado. Hashing Abierto Encadenamiento Hashing Cerrado Uso de Buckets Hashing Cerrado Direccionamiento Abierto

J.L.R.R

Encadenamiento (Hashing Abierto)

La tcnica de encadenamiento se trata en mantener M cabezas de listas de sinnimos. La ventaja de la tcnica de encadenamiento es que el crecimiento de esas listas de sinnimos es ilimitada. Cabe citar que un numero primo minimiza las colisiones mas de dos colisiones no hay.

Tcnica de uso de Cubos (Buckets) (Hashing Cerrado)


La tcnica de uso de cubos trabaja con M entradas donde cada entrada tiene un numero fijo N de sinnimos . Cuando uno de estos cubos se llena la bsqueda continua en una zona conocida como de overflout.

Direccionamiento Abierto (Hashing Cerrado)


Ac se utiliza para los sinnimos la secuencia de prueba. Existe variada tcnica de secuencia de prueba pero solo vamos a mencionar las mas utilizadas. Secuencia de Prueba Lineal H (K) - C * P (K) P (K) 1 0 <= i <= M - 1 La desventaja que posee esta tcnica es que si calculamos la funcin hash y nos da como resultado la entrada 1, 2 o 3 en la tabla vemos que la entrada 4 tiene mas posibilidades de ser ocupada que la entrada 0. Es que los grupos grandes tienden a compactarse lo que hace que la secuencia de prueba lineal sea cada vez mas extensa. Secuencia de Prueba Pseudo Random H (K), H (K) + r1, H (K) + r2, H (K) + r3, ....., H (K) + rM r = numero generado con la funcin pseudo random Secuencia de Prueba del Residuo Cuadratico H (K), H (K) + c2, H (K) - c2 0<= i <= ((M-1)/2) c = constaste Doble Hashing 0<= i <= M - 1 H (K) - i * H2 (K) 2

J.L.R.R Una buena funcin hash (h), en un contexto particular, ser aquella que minimice las colisiones en dicho contexto. En la medida de lo posible, es altamente recomendable experimentar con diversas funciones, antes de escoger una. La seleccin de una funcin hash estar influida por las respuestas que se de a las siguientes consideraciones. Puede escogerse la funcin hash para ajustarla a los registros a procesar? La respuesta a esta pregunta no siempre es afirmativa. Por ejemplo, si se usara loa funcin hash para la tabla de smbolos de un compilador o un ensamblador, la respuesta seria negativa, ya que no sabemos que identificadores encontraremos. Por otro lado, en un banco de datos, es conocido el formato de las claves ( e incluso en muchas ocasiones las propias claves). Importa el tiempo empleado en calcular la funcin hash? Si los registros se encuentran en memoria secundaria, la respuesta bien puede ser no, en especial si los tiempos de acceso son relativamente altos. En estos casos, se desea una funcin que minimice el numero de accesos, independientemente del tiempo que lleve calcularla. Por otro lado, para tablas que residen en memoria principal no tendr sentido minimizar el numero de accesos. Con que instrucciones se cuenta para calcular la funcin hash? Algunas funciones requieren manipular los bits de la clave, lo que no es fcil hacer en algunos lenguajes de alto nivel. Otras requieren el uso de funciones, como la raz cuadrada, no siempre disponibles. Cual es la longitud de las claves? Si las claves tienen mas de una palabra de longitud, puede ser conveniente realizar un preproceso con ellas, como por ejemplo sumar las palabras que la componen, antes de calcular la funcin hash Puede escogerse el tamao de la tabla y la forma de las direcciones que se usaran? Si este es el caso, ser posible escoger una tabla cuyo tamao sea potencia de dos (o de diez), lo cual es requerido por ciertos mtodos. Se encuentra las claves distribuidas en alguna forma aproximadamente aleatoria? Generalmente, las claves tendrn una distribucin casi uniforme; sin embargo, es posible mostrar que algunas funciones de hash tienden a crear sinnimos para una coleccin amplia de llaves. Por otro lado, si la distribucin de las claves es conocida, se pueden utilizar funciones hash adecuadas para obtener una mejor distribucin de direcciones.