La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

IBD Clase 6.

Presentaciones similares


Presentación del tema: "IBD Clase 6."— Transcripción de la presentación:

1 IBD Clase 6

2 Árboles Índices: problemas Indices grandes -> mem. secundaria
Acceso a mem. secundaria -> lento Búsqueda binaria -> demasiados desplazamientos En un índice de 1000 items se requieren 9.5 (aprox.) desplazamientos en promedio Costo de mantener índice ordenado Es necesario un método donde las reorganizaciones sean locales y no masivas IBD - CLASE 6 UNLP - Facultad de Informática

3 Arboles Arbol: Estructura de datos que permiten localizar en forma más rápida información de un archivo. (usando esta estructura para los indices) Tipos de árboles Binarios AVL Multicamino Balanceado (B, B*, B+) IBD - CLASE 6 UNLP - Facultad de Informática

4 Arboles Estructura JERÁRQUICA no lineal
Relaciones padre-hijo entre nodos Ejemplos: sistema de ficheros, estructura de un libro, diagrama de clases JAVA, diagrama organizativo... MiEmpresa Ventas I+D Producción Portátiles Sobremesa ES Internacional Europa Asia América IBD - CLASE 6 UNLP - Facultad de Informática

5 Arboles hay un único nodo raíz
Un árbol se caracteriza por estar formado por una serie de nodos conectados por una serie de aristas que verifican que: hay un único nodo raíz cada nodo, excepto la raíz, tiene un único padre hay un único camino (desde la raíz hasta cada nodo) IBD - CLASE 6 UNLP - Facultad de Informática

6 Arboles la estructura vacía, o
Un árbol de tipo base T es: la estructura vacía, o un nodo de tipo T con un número finito de estructuras árbol de tipo base T disjuntas llamadas subárboles <arbol> ::= <<nulo>> | <nodo> <nodo> ::= <info> {<arbol>} Puede estar ordenado o no IBD - CLASE 6 UNLP - Facultad de Informática

7 Arboles: terminología básica
Raíz: único nodo sin padre Nodo interno: tiene al menos un hijo Nodo hoja (externo): no tiene hijos Descendiente directo: hijo Descendientes: hijo, nieto... Subárbol: árbol formado por un nodo y sus descendientes subárbol B C D E F G H I J K IBD - CLASE 6 UNLP - Facultad de Informática

8 Arboles: terminología básica
Grado de un nodo: número de descendientes directos Grado del árbol: mayor grado de sus nodos Árbol binario: árbol de grado 2 Cada nodo tiene a lo sumo dos descendientes directos Árbol multicamino: Cada nodo puede tener n descendientes directos Lista= árbol degenerado de grado 1 IBD - CLASE 6 UNLP - Facultad de Informática

9 Arboles: terminología básica
Profundidad de un nodo: número de predecesores Altura del árbol: profundidad máxima de cualquier nodo A profundidad(A)=0 profundidad(H)=2 altura=3 B C D E F G H I J K IBD - CLASE 6 UNLP - Facultad de Informática

10 Arboles: terminología básica
Camino: existe un camino del nodo X al nodo Y, si existe una sucesión de nodos que permitan llegar desde X a Y. camino(A,K)={A,B,F,K} camino(C,K)={} A B C D E F G H I J K IBD - CLASE 6 UNLP - Facultad de Informática

11 Arboles: árbol binario
Es un árbol de grado 2 Cada nodo tiene de 0 a 2 descendientes directos: el hijo izquierdo y el derecho <arbol> ::= <<nulo>> | <nodo> <nodo> ::= <info> <izq> <der> <izq> ::= <arbol> <der> ::= <arbol> A B C D E F G H I IBD - CLASE 6 UNLP - Facultad de Informática

12 Arboles: árbol binario
Aplicación: expresiones aritméticas, árboles de decisión, búsqueda (ABB) En algunos casos se exige que el árbol sea completo = todo nodo interno tiene dos descendientes. Árbol binario completo Árbol binario no completo IBD - CLASE 6 UNLP - Facultad de Informática

13 Arboles: árbol binario
Ejemplo: expresiones aritméticas nodo interno: operadores nodos hoja: operandos 2*(a-1)+3*b + 2 - 3 b a 1 IBD - CLASE 6 UNLP - Facultad de Informática

14 Arboles: árbol binario
Ejemplo de aplicación: árboles de decisión nodo interno: preguntas con respuesta si/no nodos hoja: decisiones ¿Dónde cenamos? ¿Cómida rápida? No ¿Con café? ¿Cara? No No Trattoría McDonalds Rodizio Pizza hut IBD - CLASE 6 UNLP - Facultad de Informática

15 Arboles: árbol binario
Ejemplo: dada una lista de claves ordenada AX CL DE FB FT HN JD KF NR PA RF SD TK WA YJ KF FB SD PA WS CL HN DE AX FT JD NR RF TK YS IBD - CLASE 6 UNLP - Facultad de Informática

16 Arboles: árbol binario
Cada nodo es un registro de long. fija Cómo se almacena ? Archivo con reg. de long fija La informacion en el archivo no está físicamente ordenada Ver ejemplo del archivo para el árbol del slide anterior Costo de espacio (muchos campos vacios) IBD - CLASE 6 UNLP - Facultad de Informática

17 Arboles: árbol binario
Insertar las claves LV NP MB KF FB SD WS PA CL HN FT AX DE JD NR RF TK YS LV NP MB IBD - CLASE 6 UNLP - Facultad de Informática

18 Arboles: árbol binario
Inserción Sólo ligar al nodo apropiado (no reorganizar) Para acceder al nodo MB son necesarios 7 accesos Para árboles con cientos de claves, se requieren más de 30 accesos. IBD - CLASE 6 UNLP - Facultad de Informática

19 Arboles: árbol binario
Arbol balanceado: la altura de la trayectoria más corta hacia una hoja no difiere de la altura de la trayectoria mas grande Inconveniente: los árboles binarios (como en el ejemplo) se desbalancean fácilmente -> búsquedas más costosas (mayor cantidad de desplazamientos) Solución: reorganizar los nodos del árbol a medida que se reciben las claves. Resultado: Arboles AVL IBD - CLASE 6 UNLP - Facultad de Informática

20 Arboles Tipos de árboles Binarios AVL Multicamino
Balanceado (B, B*, B+) IBD - CLASE 6 UNLP - Facultad de Informática

21 Arboles AVL Arbol binario balanceado en altura. La diferencia máx. de altura entre las alturas de cualquiera de 2 subárboles que comparten raiz común es 1 Se llama árbol balanceado en altura ó árbol BA(1) Las inserciones y eliminaciones se efectúan con un mínimo de accesos Miembro de una clase más gral. de árboles balanceados en altura BA(k): máx. diferencia de altura es k IBD - CLASE 6 UNLP - Facultad de Informática

22 Arboles AVL Garantizan un cierto nivel mínimo de desempeño de búsqueda. La estructura debe ser respetada -> al insertar nuevos nodos, se realizan rotaciones restringidas a un área local del árbol Como son árboles binarios, con muchos niveles son muy profundos. IBD - CLASE 6 UNLP - Facultad de Informática

23 Arboles AVL En un árbol binario completamente balanceado, el peor caso de búsqueda para encontrar 1 clave (considerando N claves posibles) busca en log2(N+1) niveles del árbol En un árbol AVL el peor caso de búsqueda podría ser buscar en 1.44 log2(N+2) niveles del árbol IBD - CLASE 6 UNLP - Facultad de Informática

24 Arboles AVL Para claves, un árbol completamente balanceado requiere desplazamiento en 20 niveles para buscar alguna de las claves. En un árbol AVL el Nº máx. de niveles a buscar es 28 Esto es bueno para almacenamiento en memoria principal En almacenamiento secundario es deseable a lo sumo 5 o 6 desplazamientos, 20 o 28 es inaceptable. IBD - CLASE 6 UNLP - Facultad de Informática

25 Arboles Volviendo a los 2 problemas iniciales:
La búsqueda binaria requiere demasiados desplazamientos Mantener un índice en orden es costoso Los árboles balanceados en altura proporcionan solución aceptable al segundo problema. IBD - CLASE 6 UNLP - Facultad de Informática

26 Arboles Binarios paginados
Desplazarse en mem. secundaria tiene un costo de tiempo relativamente alto Aunque, una vez en posición, leer o escribir un conjunto de bytes continuos es rápido La combinación de : desplazamiento lento + transferencia rápida -> conduce a la idea de paginación IBD - CLASE 6 UNLP - Facultad de Informática

27 Arboles Binarios paginados
Al dividir un arbol binario en págs y después almacenar c/pág en bloques de localidad contiguas en disco  se puede reducir el Nº de desplazamientos para cualquier búsqueda. Paginación -> solución potencial al problema de búsqueda. IBD - CLASE 6 UNLP - Facultad de Informática

28 Arboles Binarios paginados
Estrategia: Dividir el árbol binario en páginas Almacenar cada página en un bloque de direcciones contiguas en disco Ver ejemplo (posibilidad de acceder a 63 nodos con sólo 2 accesos a disco) Dividir el árbol en páginas permite búsquedas más rápidas en almacenamiento secundario. IBD - CLASE 6 UNLP - Facultad de Informática

29 Arboles Binarios paginados
Ejemplo: Suposición de árbol completamente balanceado Páginas de 8 Kb -> 511 claves por pág. Para buscar cualquiera de claves se requieren sólo 3 desplazamientos. IBD - CLASE 6 UNLP - Facultad de Informática

30 Arboles Binarios paginados
Ejemplo: Pero caso de búsqueda en un árbol binario balanceado: log2 (N+1), N: cantidad de claves Para las versiones paginadas del mismo árbol: logk+1(N+1), N: cantidad de claves, k: cant. claves por pág. Comparación log2 ( ) = 27 desplazamientos log511+1( )= 3 desplazamientos IBD - CLASE 6 UNLP - Facultad de Informática

31 Arboles Binarios paginados
Uso de páginas grandes: Cada acceso a una página requiere transmitir muchos datos, la mayoría no usados. Hay tiempo de transmisión adicional, pero se ahorran muchos desplazamientos que consumen más tiempo que las retransmisiones. Problemas: Cómo construirlo ? Cómo elegir la raiz ? Cómo mantenerlo balanceado ? La idea de agrupar claves en páginas es MB, pero no se ha encontrado forma de agrupar las claves correctamente IBD - CLASE 6 UNLP - Facultad de Informática

32 Arboles Tipos de árboles Binarios AVL Multicamino
Balanceado (B, B*, B+) IBD - CLASE 6 UNLP - Facultad de Informática

33 Arboles Multicamino Árboles n-arios o Multicamino: Árbol en el que cualquier nodo puede tener cualquier número de hijos Árboles con grado  2 IBD - CLASE 6 UNLP - Facultad de Informática

34 Arboles Multicamino Implementación 1 Hijos como arreglo de referencias
Desaprovecha memoria si el número de hijos es muy variable No puede usarse si el número de hijos es ilimitado ... A ... B ... C ... D ... E ... F ... G ... H ... I ... J IBD - CLASE 6 UNLP - Facultad de Informática

35 Arboles Multicamino Implementación 2 Hijos como una lista enlazada A B
siguiente C hijos F hijos siguiente siguiente hijos G hijos D siguiente hijos hijos E H siguiente I hijos siguiente J hijos IBD - CLASE 6 UNLP - Facultad de Informática

36 Arboles Tipos de árboles Binarios AVL Multicamino
Balanceado (B, B*, B+) IBD - CLASE 6 UNLP - Facultad de Informática

37 Arboles B Hasta ahora, se han construido árboles desde la raiz hacia abajo. Problemas: Elegir la raiz Mantenerlo balanceado Arboles B  construirlos hacia arriba a partir de la base. La raiz emerge con la construcción. IBD - CLASE 6 UNLP - Facultad de Informática

38 Árboles B Árboles B (balanceados)
Son árboles multicamino con una construcción especial en forma ascendente que permite mantenerlo balanceado a bajo costo. IBD - CLASE 6 UNLP - Facultad de Informática

39 Arboles B Propiedades de un árbol B de orden M:
Orden: cant. máx. de punteros por nodo Cant. de punteros= cant. claves + 1 Ningún nodo tiene más de M hijos C/nodo (menos raíz y los terminales) tienen como mínimo [M/2] hijos La raíz tiene como mínimo 2 hijos (o sino ninguno) Todos los nodos terminales a igual nivel Nodos no terminales con K hijos contienen K-1 nodos. Los nodos terminales tienen: Minimo: [M/2]–1 nodos Máximo: M–1 nodos Formato del nodo Cada Ri-1 < Ri < Ri+1 IBD - CLASE 6 UNLP - Facultad de Informática

40 Arboles B Estructura Archivo con registros de long. Fija
Cada registro tiene una pág. o nodo En Pascal (ver ejemplo): PaginaAB=record cant_claves: integer claves: array [1..maxllaves] of char; hijos: array [1..maxhijos] of integer; end IBD - CLASE 6 UNLP - Facultad de Informática

41 Arboles B Definición: nodo adyacente hermano Operaciones
Dos nodos son adyacentes hermanos si tienen el mismo padre y son apuntados por punteros adyacentes en el padre. Operaciones Búsqueda Borrado Creación e inserción modificación IBD - CLASE 6 UNLP - Facultad de Informática

42 Arboles B Búsqueda de información Comienza desde el nodo raíz
Busca la llave en el nodo Sino la localiza se toma el puntero correspondiente entre las claves existentes Si no es puntero nulo se toma ese nodo y se repite desde principio. Si es un puntero nulo el elemento no se encuentra en el árbol. Ver ejemplos IBD - CLASE 6 UNLP - Facultad de Informática

43 Arboles B Algoritmo (iterativo) Algoritmo (recursivo)
encontro := false (k llave) tomar la raíz Repeat N nro de elementos nodo Case k = llave del registro encontro := true k < llave( R1) P := Po k > llave (Rn) P := Pn otherwise P := Pi (i/ Ri-1 < k <Ri) EndCase IF P not null then leer nodo apuntado por P Until encontro or P null Algoritmo (recursivo) ordem M estruc. del registro Record contador llaves llaves (arreglo M-1 elem.) hijos (arreglo M elem.) End Function Busca (Nrr, llave, NRR_encon, Pos-enc) Si Nrr = nulo entonces devuelve (‘no encon’) sino lee nodo apuntado x NRR en página busca la llave en nodo; Pos:= Posición donde encuentra o debería estar la llave Si encontro llave entonces nrr_encon := Nrr (nodo con la llave) pos_enc := pos (posición dentro de la llave) devuelve (encontrada) sino {busco en el nivel inferior} devuelve (busca( hijo[pos], llave, nrr_encon, pos_enc)) Fin S Fin Function IBD - CLASE 6 UNLP - Facultad de Informática

44 Arboles Performance Orden M, # de nodos terminales N, N+1 punteros nulos. Accesos: Mejor caso: 1 lectura Pero caso: h lecturas (con h altura del árbol) Como acotamos h Nivel # mínimo de descendientes 2 2 * [M/2] * [M/2] * [M/2] …………………………………………………. h * [M/2]h-1 IBD - CLASE 6 UNLP - Facultad de Informática

45 Arboles Relacion entre h y # de nodos N+1 >= 2 * [M/2]h-1
h <= 1 + log[M/2] ((N+1)/2) M = y N = h <= (4 lecturas encuentra un registro) IBD - CLASE 6 UNLP - Facultad de Informática

46 Arboles B Inserción (creación)
Comienza con una búsqueda que llega hasta el nivel hoja Después de encontrar lugar de inserción en el nivel hoja, el trabajo de inserción, división y promoción continúa en forma ascendente desde abajo IBD - CLASE 6 UNLP - Facultad de Informática

47 Arboles B Inserción (creación)
Los registros se insertan en un nodo terminal Casos posibles El registro tiene lugar en el nodo terminal (no se produce overflow): solo se hacen reacomodamientos internos en el nodo El registro no tiene lugar en el nodo terminal (se produce overflow): el nodo se divide y los elementos se reparten entre los nodos, hay una promoción al nivel superior, y esta puede propagarse y generar una nueva raíz. Ver ejemplos Supongamos el orden de un árbol 4 Llegan los elementos: c, s, e, t, a, m, p, i, b, w, d, j IBD - CLASE 6 UNLP - Facultad de Informática

48 Arboles B Repeat Algoritmo (iterativo) { reg.: reg a insertar
fin: inserción finalizada encontro: elemento ya está P: puntero al nodo N_G: nodo sobredimensionado N : # reg } { busco la llave en el árbol } If encontro Then reportar llave repetida Else { insertar elemento } P := nil encontro := falso Repeat Si nodo no esta lleno entonces poner reg y reordenar encontro sino copiar el nodo enN_G insertar reg. en N_G reg:= centro de N_G nodo corr.:=1/2 N_G izq nodo nuevo:=1/2 N_G der If nodo raiz nuevo then generar nuevos punteros Until encontro IBD - CLASE 6 UNLP - Facultad de Informática

49 Arboles B Algoritmo (recursivo) Funcion inserta (Nrr_Actual, llave,
hijo_promo, llave_promo) Si Nrr_Actual = nulo entonces llave_promo := llave hijo_promo := nulo devuelve Promocion (promueve llave original y nulo) sino leer página de Nrr_acutal en pagina buscar llave en pagina pos := posicion donde deberia estar en llave Si encuentra llave entonces devuelve (error) valordevuelto := inserta(pagina, hijo[pos], llave, nrr_P_A, llave_P_a) Si valordevuelto <> promocion entonces devuelve(valordevuelto) sino si hay espacio en pagina para llave_p_a entonces insertar(llave_p_a, nrr_p_a en pagina) promovida abajo devuelve (no promocion) sino divide( llave_p_a, nrr_p_a, pagina, llave_promo, hijo_promo, página_nueva) escribe pagina en archivo en nrr_actual escribe pagina_nueva en hijo_promo devuelve promoción promociona Fin Si llave_promo, hijo_promo fin funcion IBD - CLASE 6 UNLP - Facultad de Informática

50 Arboles B Procedimiento Divide (llave_i, nrr_i, pagina, llave_promo, hijo_promo, pagina_nueva ) copiar pagina + llave a un nodo que pueda contener a todas las llaves. insertar llave_i, nrr_i en los lugares correctos de la pagina crear una nueva pagina para pagina_nueva asignar a llave_promo el valor de la llave de enmedio de la pagina grande asignar a hijo_d_promo el nrr de pagina_nueva copiar las llaves y apuntadores que preceen a llave_promo en pagina idem posteriores pagina_nueva fin procedemiento IBD - CLASE 6 UNLP - Facultad de Informática

51 Arboles B Performance Mejor caso (sin overflow)
H lecturas 1 escritura Peor caso (overflow hasta la raíz, aumenta en uno el nivel del árbol) 2h+1 escrituras (dos por nivel más la raíz) Estudios realizados M = % divisiones M = % divisiones IBD - CLASE 6 UNLP - Facultad de Informática

52 Arboles B Eliminación Mejor caso: borra un elemento del nodo y no produce underflow, solo reacomodos ( # elementos >= [M/2]-1 Peor caso: se produce underflow, #elementos < [M/2] – 1 Eliminar Nodo terminal Caso 1 Nodo no terminal (llevar a un nodo terminal) Caso 2 Dos soluciones Redistribuir Caso 3 Concatenar Caso 4 IBD - CLASE 6 UNLP - Facultad de Informática

53 Arboles B Redistribuir Concatenación
Cuando un nodo tiene underflow puede trasladarse claves de un nodo adyacente hermano (en caso que este tenga suficientes elementos) Concatenación Si un nodo adyacente hermano está al minimo (no le sobra ningún elemento, no se puede redistribuir), se concatena con un nodo adyacente disminuyendo el # de nodos (y en algunos casos la altura del árbol) Hacer un ejemplo con orden 5 (cuatro elementos por nodo) y poner cualquier llave, en función de eso hacer los siguientes ejemplo Uno: eliminar de un nodo terminal sin problema Dos: eliminar de un nodo no terminal y que no genere problemas Tres: eliminar de un nodo terminal (o no) y que produzca redistribuición Cuatro: ahora que provoque concatenación. IBD - CLASE 6 UNLP - Facultad de Informática

54 Arboles B Algoritmo de eliminación (iterativo)
{ fin: indica fin del borrado n_g:nodo tamaño mayor al normal ady: nodo adyacente hermano reg: reg. a borrar} {buscar reg en el árbol } If reg no está en un nodo terminal then buscar el sucesor de reg en un nodo terminal intercalar reg con su sucesor { eliminación de reg } fin := falso repeat remover reg y el puntero asociado If nodo corriente > [M/2] -1 elem. then fin := true else if es posible redistribuir then {redistribuir}{ady.>min.} copiar ady y nodo actual en n_g dividir n_g promover nueva llave a padre armar nodo actual y ady con la mitad de n_g en c/u fin := true else {concatenar} elegir el mejor ady para concat. poner ady y nodo actual juntos y acoplarle elemnto nodo padre eliminar nodo que sobra y producir enganches nuevo reg elemento que bajo nodo padra y que debemos eliminar Until fin IF no hay registro en la raiz then nueva raiz nodo corriente liberar vieja raíz IBD - CLASE 6 UNLP - Facultad de Informática

55 Arboles Performance Mejor caso (borra de un nodo terminal)
H lecturas 1 escritura (escribir el nodo sin el elem. borrado) Peor caso (concatenación lleva a decrementar el nivel del árbol en 1) 2h – 1 lecturas H + 1 escrituras IBD - CLASE 6 UNLP - Facultad de Informática


Descargar ppt "IBD Clase 6."

Presentaciones similares


Anuncios Google