fiubaodd - curso servetto1 organizaciones b, b+, b* y b# Árboles balanceados Árboles en archivos...

38
FIUBA ODD - Curso Servetto 1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

Upload: florencio-negron

Post on 13-Feb-2015

2 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 1

Organizaciones B, B+, B* y B#

Árboles Balanceados

Árboles en Archivos

Primitivas

Page 2: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 2

Árboles Balanceados

• Rudolf Bayer y Ed McCreight describieron a los árboles B en un artículo en 1972.

• Se mantienen balanceados en altura, con todos los nodos hoja al mismo nivel.

• Las operaciones de búsqueda y actualización afectan a pocos nodos.

• Garantizan que más de determinada proporción de la capacidad de cada nodo esté ocupada.

Page 3: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 3

Árboles en Archivos

• Los nodos son bloques de organización de registros.• Los registros pueden ser de longitud fija o de longitud

variable.• Los nodos sucesores se referencian por su posición

relativa en el archivo, y las referencias son campos de control en los nodos.

• Las raíces se mantienen siempre en una posición fija del archivo (por ejemplo la 0).

• Los nodos requieren campos de control generales como contador de registros contenidos y nivel del nodo (las hojas tienen el nivel más bajo).

• Las hojas tienen más capacidad útil que el resto de los nodos por no requerir referencias a sucesores.

Page 4: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 4

Organización B

• El nodo raíz es una hoja o tiene al menos dos nodos sucesores.

• Cada nodo tiene un sucesor más que la cantidad de elementos que cargue, y a cada elemento se asocia un sucesor izquierdo y otro derecho.

• Cada nodo excepto el raíz tiene ocupada al menos la mitad de su capacidad.

• Los elementos de cada nodo están ordenados por un identificador.

• En cada nodo, todo elemento tiene identificador mayor que el último elemento del sucesor izquierdo y menor que el primer elemento del sucesor derecho.

Page 5: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 5

Capacidades de elementos en nodos internos y hojas respect.: 4, 7.Los dos primeros campos de cada nodo indican nivel y cantidad de elementos.Los elementos que se muestran son sólo identificadores, que pueden representar registros completos.

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 2; 1( 184) 5( 387) 3

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 7; ( 199)( 200)( 238)( 266)( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 2; 2( 801) 6( 880) 4

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 3; ( 838)( 847)( 858)

NODO 4: 0, 3; ( 897)( 935)( 994)

Page 6: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 6

Primitivas B

• De Creación– Crear → crea un arbol B vacío: inicializa una

raíz vacía y la almacena en un archivo nuevo, creando tambien un archivo de referencias a nodos libres vacío.

– Cargar → inserta elementos ordenados por identificador → los registros van a la última hoja, con restricciones de contenido especiales.

Page 7: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 7

Primitivas B

• De Recuperación de Registros– Buscar → Consulta o recuperación unitaria de

registro dado un identificador (falla si no se encuentra un registro con ese identificador)

– Listar → Reporte o recuperación comprensiva de todo el árbol o de registros entre dos identificadores tope, recorriendo el árbol in order (recorrido único)

– Exportar → Exportar el árbol en pre orden a un archivo de texto (pruebas de desarrollo)

Page 8: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 8

Primitivas B

• De Actualización de Registros → El archivo se mantiene siempre organizado– Insertar → Inserción de un registro con validación de

unicidad → Puede producir la división de nodos• Todo nuevo registro se inserta ordenado por identificador en

una hoja• El árbol crece más rápido en ancho y más lento en alto

– Modificar → Modificación de un registro → Se reescribe un único nodo (el identificador no se modifica)

– Suprimir → Eliminación de un registro → Puede producir fusión de nodos

Page 9: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 9

1. Inserción de registro con identificador 202:

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 2; 1( 184) 5( 387) 3

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 7; ( 199)( 200)( 238)( 266)( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 2; 2( 801) 6( 880) 4

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 3; ( 838)( 847)( 858)

NODO 4: 0, 3; ( 897)( 935)( 994)

Capacidades de elementos en nodos internos y hojas respect.: 4, 7 → sobreflujo del nodo 5Los nodos resaltados son los afectados (leídos).

Page 10: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 10

Se acomodan los registros en el nodo 5 y se devuelve al padre el registro del centro:

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 2; 1( 184) 5( 387) 3 ← ( 266)

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 7; ( 199)( 200)(202)( 238)( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 2; 2( 801) 6( 880) 4

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 3; ( 838)( 847)( 858)

NODO 4: 0, 3; ( 897)( 935)( 994)

Page 11: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 11

Desde el nodo 7 se dispone un nuevo nodo (el 9) para dividir al 5, se graban los nodos 5 y 9 balanceados, y se inserta en el nodo 7 el registro que subió junto con la referencia al 9 como sucesor derecho:

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 3; 1( 184) 5( 266) 9( 387) 3

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 2; 2( 801) 6( 880) 4

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 3; ( 838)( 847)( 858)

NODO 4: 0, 3; ( 897)( 935)( 994)

Page 12: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 12

Desde el nodo 0 se graba al nodo 7:

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 3; 1( 184) 5( 266) 9( 387) 3

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 2; 2( 801) 6( 880) 4

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 3; ( 838)( 847)( 858)

NODO 4: 0, 3; ( 897)( 935)( 994)

Page 13: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 13

Finalmente se termina, sin grabar el nodo 0 dado que no resultó modificado:

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 3; 1( 184) 5( 266) 9( 387) 3

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 2; 2( 801) 6( 880) 4

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 3; ( 838)( 847)( 858)

NODO 4: 0, 3; ( 897)( 935)( 994)

Page 14: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 14

2. Supresión del registro con identificador 935:

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 3; 1( 184) 5( 266) 9( 387) 3

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 2; 2( 801) 6( 880) 4

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 3; ( 838)( 847)( 858)

NODO 4: 0, 3; ( 897)( 935)( 994)Capacidades de elementos en nodos internos y hojas respect.: 4, 7 → subflujo del nodo 5

Page 15: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 15

Desde el nodo 8 se intenta balancear el 4 con un hermano adyacente, y como no se puede se pasa su contenido al 6 y se libera (el nodo 8 debe bajar el registro con clave 880):

NODO 0: 2, 1; 7( 611) 8

NODO 7: 1, 3; 1( 184) 5( 266) 9( 387) 3

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 8: 1, 1; 2( 801) 6 (subflujo)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Nodos liberados: 4

Page 16: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 16

Desde el nodo 0 se intenta balancear el 8 con un hermano adyacente, y como se puede, se hace el balanceo y se graba a ambos:

NODO 0: 2, 1; 7( 387) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 17: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 17

Finalmente se graba el nodo 0:

NODO 0: 2, 1; 7( 387) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 18: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 18

Supresión de un registro que no está en una hoja: 387

NODO 0: 2, 1; 7( 387) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 19: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 19

Se lee el sucesor derecho pidiendo un registro:

NODO 0: 2, 1; 7( 387) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 20: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 20

Como el nodo 8 no es hoja debe pedir un registro a su primer sucesor:

NODO 0: 2, 1; 7( 387) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 4; ( 461)( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 21: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 21

Como el nodo 3 es hoja, devuelve su primer registro:

NODO 0: 2, 1; 7( 387) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 3; ( 463)( 489)( 569) // ( 461)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 22: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 22

El padre del 3 lo graba (si hubiera quedado con subflujo debería balancearlo o fusionarlo con un hermano adyacente):

NODO 0: 2, 1; 7( 387) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6 // (461)

NODO 3: 0, 3; ( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 23: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 23

El padre del 8 (la raíz) no necesita grabarlo porque no se modificó, así que sólo sustituye el registro a eliminar por el que le subió 8:

NODO 0: 2, 1; 7( 461) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 3; ( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 24: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 24

Se termina grabando la raíz:

NODO 0: 2, 1; 7( 461) 8

NODO 7: 1, 2; 1( 184) 5( 266) 9

NODO 1: 0, 7; ( 10)( 19)( 40)( 52)( 140)( 150)( 165)

NODO 5: 0, 4; ( 199)( 200)(202)( 238)

NODO 9: 0, 3; ( 278)( 300)( 320)

NODO 8: 1, 2; 3( 611) 2( 801) 6

NODO 3: 0, 4; ( 463)( 489)( 569)

NODO 2: 0, 4; ( 750)( 762)( 787)( 791)

NODO 6: 0, 6; ( 838)( 847)( 858)(880)(897)(994)

Page 25: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 25

Organización B+

• Se diferencia de la B en que los registros sólo se almacenan en los nodos hoja, que están encadenados entre sí → Permite recuperación secuencial

• Los nodos internos o índice, almacenan sólo identificadores que sirven de guía para llegar a las hojas → Conforman un índice B a las hojas

Page 26: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 26

Capacidades de elementos en nodos internos y hojas respect.: 4, 6

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(33810) 4

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 6; (20173)(21373)(23548)(27906)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(46396) 6(48442) 3

NODO 1: 0, 3; (41543)(44353)(45454) 6

NODO 6: 0, 3; (46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 27: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 27

Primitivas B+

• Mismas primitivas que la organización B excepto la de búsqueda, y una adicional de recuperación secuencial– La búsqueda es aproximada → si no se encuentra en

una hoja el registro con el identificador dado, devuelve el primer registro con identificador mayor al buscado (por si se inicia recorrido secuencial)

– Siguiente → Devuelve el siguiente registro a partir del último accedido → Estrategias

– Puede haber una primitiva para devolver el primer registro del archivo

Page 28: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 28

1. Inserción del registro con clave 25000:

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(33810) 4

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 6; (20173)(21373)(23548)(27906)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(46396) 6(48442) 3

NODO 1: 0, 3; (41543)(44353)(45454) 6

NODO 6: 0, 3; (46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Sobreflujo en nodo 5.

Page 29: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 29

Se acomodan los registros en elnodo 5 y de devuelve al padre el registro central:

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(33810) 4 ← (27906)

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 6; (20173)(21373)(23548)(25000)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(46396) 6(48442) 3

NODO 1: 0, 3; (41543)(44353)(45454) 6

NODO 6: 0, 3; (46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 30: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 30

Desde el nodo 8 se dispone de un nodo nuevo (10) y se acomoda el registro que subió primero, y luego la segunda mitad del nodo con sobreflujo, se graban los dos nodos y se incorpora al nodo 8 un orientador:

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10

NODO 10: 0, 3; (27906)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(46396) 6(48442) 3

NODO 1: 0, 3; (41543)(44353)(45454) 6

NODO 6: 0, 3; (46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 31: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 31

Desde el nodo 0 se graba al nodo 8:

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10

NODO 10: 0, 3; (27906)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(46396) 6(48442) 3

NODO 1: 0, 3; (41543)(44353)(45454) 6

NODO 6: 0, 3; (46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 32: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 32

Se termina sin necesidad de grabar la raíz, ya que noresultó modificada:

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10

NODO 10: 0, 3; (27906)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(46396) 6(48442) 3

NODO 1: 0, 3; (41543)(44353)(45454) 6

NODO 6: 0, 3; (46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 33: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 33

Supresión de registro con identificador 45454:

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10

NODO 10: 0, 3; (27906)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(46396) 6(48442) 3

NODO 1: 0, 3; (41543)(44353)(45454) 6

NODO 6: 0, 3; (46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Subflujo en nodo 1

Page 34: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 34

Desde el padre (nodo 7) se intenta balancear con hermano adyacente, y como no se puede se fusionan y se libera al 6:

NODO 0: 2, 1; 8(41543) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10

NODO 10: 0, 3; (27906)(28195)(29084) 4

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 7: 1, 2; 1(48442) 3 ← subflujo

NODO 1: 0, 3; (41543)(44353)(46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 35: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 35

Desde el padre (nodo 0) se intenta balancear con hermano adyacente, y como se puede, se balancean el 8 y el 7 y se graban:

NODO 0: 2, 1; 8(33810) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10

NODO 10: 0, 3; (27906)(28195)(29084) 4

NODO 7: 1, 2; 4(41543) 1(48442) 3

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 1: 0, 3; (41543)(44353)(46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 36: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

FIUBA ODD - Curso Servetto 36

Se termina grabando la raíz:

NODO 0: 2, 1; 8(33810) 7

NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10

NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9

NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5

NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10

NODO 10: 0, 3; (27906)(28195)(29084) 4

NODO 7: 1, 2; 4(41543) 1(48442) 3

NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1

NODO 1: 0, 3; (41543)(44353)(46396)(47165)(47405) 3

NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0

Page 37: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

Archivos B vs Archivos B+

• Ventajas de la Organización B sobre la B+– Puede requerir menos nodos que un B+ para cargar

los mismos datos (no tiene redundancia de identificadores).

– Algunos datos se pueden encontrar antes de llegar a una hoja.

• Desventajas de la organización B– Sólo una pequeña proporción de datos se puede

encontrar tempranamente.– Si los datos son grandes, los nodos internos tienen

pocos hijos y el árbol es alto.

Page 38: FIUBAODD - Curso Servetto1 Organizaciones B, B+, B* y B# Árboles Balanceados Árboles en Archivos Primitivas

Organizaciones B* y B#

• Son variantes de las organizaciones B y B+ con primitivas de inserción y supresión modificadas de manera que garanticen que todos los nodos del árbol excepto el raíz tengan ocupada más de dos tercios de su capacidad– Altas: cuando un nodo queda con sobreflujo, se trata de

balancear con un hermano adyacente, y si no se puede porque el hermano está completo, se agrega un nodo nuevo entre medio y se balancea la carga de los dos originales entre tres (quedan con 2/3 de su capacidad ocupada)

– Bajas: cuando un nodo queda con subflujo y no se puede balancear con un hermano adyacente porque éste tiene carga mínima, se intenta balancear con otro hermano, y si tampoco se puede se libera uno de ellos y se distribuye su carga entre los otros dos, que quedan completos