ibd clase 6. unlp - facultad de informáticaibd - clase 6 2 Árboles Índices: problemas indices...
TRANSCRIPT
IBD
Clase 6
UNLP - Facultad de InformáticaIBD - CLASE 62
Árboles
Índices: problemasIndices grandes -> mem. secundariaAcceso a mem. secundaria -> lentoBú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
UNLP - Facultad de InformáticaIBD - CLASE 63
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 árbolesBinariosAVLMulticaminoBalanceado (B, B*, B+)
UNLP - Facultad de InformáticaIBD - CLASE 64
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+DProducción
Portátiles SobremesaES Internacional
Europa Asia América
UNLP - Facultad de InformáticaIBD - CLASE 65
Arboles
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ízcada nodo, excepto la raíz, tiene un
único padrehay un único camino (desde la raíz
hasta cada nodo)
UNLP - Facultad de InformáticaIBD - CLASE 66
Arboles
Un árbol de tipo base T es:la estructura vacía, oun 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
UNLP - Facultad de InformáticaIBD - CLASE 67
Arboles: terminología básica
subárbol
A
B DC
G HE F
I J K
Raíz: único nodo sin padreNodo interno: tiene al menos un hijoNodo hoja (externo): no tiene hijosDescendiente directo: hijoDescendientes: hijo, nieto...Subárbol: árbol formado por un nodo y sus descendientes
UNLP - Facultad de InformáticaIBD - CLASE 68
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
UNLP - Facultad de InformáticaIBD - CLASE 69
Arboles: terminología básica
Profundidad de un nodo: número de predecesores Altura del árbol: profundidad máxima de cualquier nodo
A
B DC
G HE F
I J K
profundidad(A)=0profundidad(H)=2altura=3
UNLP - Facultad de InformáticaIBD - CLASE 610
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 DC
G HE F
I J K
UNLP - Facultad de InformáticaIBD - CLASE 611
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
F GD E
H I
UNLP - Facultad de InformáticaIBD - CLASE 612
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
UNLP - Facultad de InformáticaIBD - CLASE 613
Arboles: árbol binario
Ejemplo: expresiones aritméticasnodo interno: operadoresnodos hoja: operandos
2*(a-1)+3*b
2
a 1
3 b
UNLP - Facultad de InformáticaIBD - CLASE 614
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?
¿Con café? ¿Cara?
Trattoría McDonaldsRodizi
oPizza hut
Sí No
Sí No Sí No
UNLP - Facultad de InformáticaIBD - CLASE 615
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
SDFB
CL
DEAX
HN
JDFT
PA
RFNR
WS
YSTK
UNLP - Facultad de InformáticaIBD - CLASE 616
Arboles: árbol binario
Cada nodo es un registro de long. fija Cómo se almacena ?
Archivo con reg. de long fijaLa informacion en el archivo no está
físicamente ordenadaVer ejemplo del archivo para el árbol del
slide anteriorCosto de espacio (muchos campos vacios)
UNLP - Facultad de InformáticaIBD - CLASE 617
Arboles: árbol binario
Insertar las claves LV NP MBKF
SDFB
CL
DEAX
HN
JDFT
PA
RFNR
WS
YSTK
LV
NP
MB
UNLP - Facultad de InformáticaIBD - CLASE 618
Arboles: árbol binario
InserciónSólo ligar al nodo apropiado (no
reorganizar)Para acceder al nodo MB son
necesarios 7 accesosPara árboles con cientos de claves, se
requieren más de 30 accesos.
UNLP - Facultad de InformáticaIBD - CLASE 619
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
UNLP - Facultad de InformáticaIBD - CLASE 620
Arboles
Tipos de árbolesBinariosAVLMulticaminoBalanceado (B, B*, B+)
UNLP - Facultad de InformáticaIBD - CLASE 621
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
UNLP - Facultad de InformáticaIBD - CLASE 622
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.
UNLP - Facultad de InformáticaIBD - CLASE 623
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
UNLP - Facultad de InformáticaIBD - CLASE 624
Arboles AVL
Para 1.000.000 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.20 o 28 es inaceptable.
UNLP - Facultad de InformáticaIBD - CLASE 625
Arboles
Volviendo a los 2 problemas iniciales:La búsqueda binaria requiere demasiados
desplazamientosMantener un índice en orden es costoso
Los árboles balanceados en altura proporcionan solución aceptable al segundo problema.
UNLP - Facultad de InformáticaIBD - CLASE 626
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
UNLP - Facultad de InformáticaIBD - CLASE 627
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.
UNLP - Facultad de InformáticaIBD - CLASE 628
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.
UNLP - Facultad de InformáticaIBD - CLASE 629
Arboles Binarios paginados
Ejemplo:
Suposición de árbol completamente balanceado
Páginas de 8 Kb -> 511 claves por pág.
Para buscar cualquiera de 134.217.727 claves se requieren sólo 3 desplazamientos.
UNLP - Facultad de InformáticaIBD - CLASE 630
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 (134.217.727 +1) = 27 desplazamientos log511+1(134.217.727 +1)= 3 desplazamientos
UNLP - Facultad de InformáticaIBD - CLASE 631
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
UNLP - Facultad de InformáticaIBD - CLASE 632
Arboles
Tipos de árbolesBinariosAVLMulticaminoBalanceado (B, B*, B+)
UNLP - Facultad de InformáticaIBD - CLASE 633
Arboles Multicamino
Árboles n-arios o Multicamino: Árbol en el que cualquier nodo puede tener
cualquier número de hijos
Árboles con grado 2
UNLP - Facultad de InformáticaIBD - CLASE 634
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
UNLP - Facultad de InformáticaIBD - CLASE 635
Arboles Multicamino
Implementación 2 Hijos como una lista
enlazada
AB
C
hijos
F
E
D
siguiente
hijos
hijos
G
siguientesiguiente
hijos
siguiente
Hhijos
I
siguiente
J
siguiente
hijos
hijos
hijos
hijos
hijos
UNLP - Facultad de InformáticaIBD - CLASE 636
Arboles
Tipos de árbolesBinariosAVLMulticaminoBalanceado (B, B*, B+)
UNLP - Facultad de InformáticaIBD - CLASE 637
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.
UNLP - Facultad de InformáticaIBD - CLASE 638
Árboles B
Árboles B (balanceados)Son árboles multicamino con una
construcción especial en forma ascendente que permite mantenerlo balanceado a bajo costo.
UNLP - Facultad de InformáticaIBD - CLASE 639
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
PO R1 P1 R2 P2 R3 P3 R4 P4 R5 P5 Nro de registros
UNLP - Facultad de InformáticaIBD - CLASE 640
Arboles B
EstructuraArchivo con registros de long. FijaCada registro tiene una pág. o nodo En Pascal (ver ejemplo):
PaginaAB=recordcant_claves: integerclaves: array [1..maxllaves] of char;
hijos: array [1..maxhijos] of integer;end
UNLP - Facultad de InformáticaIBD - CLASE 641
Arboles B
Definición: nodo adyacente hermano 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
UNLP - Facultad de InformáticaIBD - CLASE 642
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
UNLP - Facultad de InformáticaIBD - CLASE 643
Arboles B
Algoritmo (iterativo)encontro := false (k llave)tomar la raízRepeat
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 PUntil encontro or P null
Algoritmo (recursivo)
ordem M estruc. del registro Record contador llaves llaves (arreglo M-1 elem.) hijos (arreglo M elem.) EndFunction 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 SFin Function
UNLP - Facultad de InformáticaIBD - CLASE 644
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 hNivel # mínimo de descendientes 1 2 2 2 * [M/2] 3 2 * [M/2] * [M/2]…………………………………………………. h 2 * [M/2]h-1
UNLP - Facultad de InformáticaIBD - CLASE 645
Arboles
• Relacion entre h y # de nodos
N+1 >= 2 * [M/2]h-1
h <= 1 + log[M/2] ((N+1)/2)
M = 512 y N = 1000000
h <= 3.37 (4 lecturas encuentra un registro)
UNLP - Facultad de InformáticaIBD - CLASE 646
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
UNLP - Facultad de InformáticaIBD - CLASE 647
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
UNLP - Facultad de InformáticaIBD - CLASE 648
Arboles B
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
UNLP - Facultad de InformáticaIBD - CLASE 649
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
UNLP - Facultad de InformáticaIBD - CLASE 650
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_nuevafin procedemiento
UNLP - Facultad de InformáticaIBD - CLASE 651
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)
• H lecturas• 2h+1 escrituras (dos por nivel más la raíz)
Estudios realizados• M = 10 25% divisiones• M = 100 2% divisiones
UNLP - Facultad de InformáticaIBD - CLASE 652
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
UNLP - Facultad de InformáticaIBD - CLASE 653
Arboles B
Redistribuir• 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)
UNLP - Facultad de InformáticaIBD - CLASE 654
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 := falsorepeat 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 eliminarUntil finIF no hay registro en la raiz then nueva raiz nodo corriente liberar vieja raíz
UNLP - Facultad de InformáticaIBD - CLASE 655
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