fiubaodd - curso servetto1 organizaciones b, b+, b* y b# Árboles balanceados Árboles en archivos...
Post on 13-Feb-2015
2 Views
Preview:
TRANSCRIPT
FIUBA ODD - Curso Servetto 1
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.
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.
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.
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)
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.
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)
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
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).
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)
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)
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)
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)
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
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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
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
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.
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
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
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
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
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
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
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
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
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.
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
top related