La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Organizaciones B, B+, B* y B#

Presentaciones similares


Presentación del tema: "Organizaciones B, B+, B* y B#"— Transcripción de la presentación:

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 5 Los 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:
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:
FIUBA ODD - Curso Servetto

13 Finalmente se termina, sin grabar el nodo 0 dado que no resultó modificado:
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:
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:
FIUBA ODD - Curso Servetto

21 Como el nodo 3 es hoja, devuelve su primer registro:
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
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:
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
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 FIUBA ODD - Curso Servetto

37 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.

38 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


Descargar ppt "Organizaciones B, B+, B* y B#"

Presentaciones similares


Anuncios Google