IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices...

55
IBD Clase 6

Transcript of IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices...

Page 1: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

IBD

Clase 6

Page 2: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 3: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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+)

Page 4: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 5: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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)

Page 6: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 7: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 8: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 9: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 10: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 11: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 12: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 13: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 14: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 15: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 16: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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)

Page 17: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 18: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 19: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 20: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

UNLP - Facultad de InformáticaIBD - CLASE 620

Arboles

Tipos de árbolesBinariosAVLMulticaminoBalanceado (B, B*, B+)

Page 21: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 22: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 23: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 24: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 25: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 26: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 27: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 28: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 29: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 30: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 31: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 32: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

UNLP - Facultad de InformáticaIBD - CLASE 632

Arboles

Tipos de árbolesBinariosAVLMulticaminoBalanceado (B, B*, B+)

Page 33: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 34: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 35: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 36: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

UNLP - Facultad de InformáticaIBD - CLASE 636

Arboles

Tipos de árbolesBinariosAVLMulticaminoBalanceado (B, B*, B+)

Page 37: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 38: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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.

Page 39: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 40: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 41: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 42: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 43: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 44: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 45: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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)

Page 46: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 47: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 48: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 49: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 50: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 51: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 52: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 53: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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)

Page 54: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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

Page 55: IBD Clase 6. UNLP - Facultad de InformáticaIBD - CLASE 6 2 Árboles Índices: problemas Indices grandes -> mem. secundaria Acceso a mem. secundaria -> lento.

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