0% encontró este documento útil (0 votos)
36 vistas13 páginas

Arbol2 3

El documento describe los árboles 2-3, una estructura de datos utilizada comúnmente en bases de datos. Los árboles 2-3 son árboles B de orden m con dos o tres hijos por nodo. Permiten búsquedas y inserciones logarítmicas sin los casos peores de los árboles binarios aleatorios. Los árboles 2-3 bien formados mantienen la misma altura en todos los subárboles, lo que garantiza un tiempo de acceso constante para cualquier nodo hoja.

Cargado por

L.Robledo
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Descargar como pdf o txt
0% encontró este documento útil (0 votos)
36 vistas13 páginas

Arbol2 3

El documento describe los árboles 2-3, una estructura de datos utilizada comúnmente en bases de datos. Los árboles 2-3 son árboles B de orden m con dos o tres hijos por nodo. Permiten búsquedas y inserciones logarítmicas sin los casos peores de los árboles binarios aleatorios. Los árboles 2-3 bien formados mantienen la misma altura en todos los subárboles, lo que garantiza un tiempo de acceso constante para cualquier nodo hoja.

Cargado por

L.Robledo
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 13

Árbol 2-3

Apuntes de apoyo para clases teóricas. Para una conceptualización completa de los temas, los alumnos deberán asistir a las
clases teóricas y completar con lectura del material bibliográfico propuesto.

16/6/2021 1
Aplicaciones
Los árboles 2-3, son un caso especial de los “árboles B de orden m”. Estos son
muy utilizados en la construcción de los índices de las tablas de Base de
Datos.

Fueron introducidos con el objeto de mejorar el tiempo de acceso en


estructuras de datos manejadas en memoria secundaria, en las cuales el
número de consultas a un registro influye de manera determinante en el
tiempo de respuesta de la operación.

En las ciencias de la computación , los árboles-B o B-árboles son estructuras


de datos de árbol que se encuentran comúnmente en las implementaciones
de bases de datos y sistemas de archivos.

16/6/2021 3
Introducción
Con esta estructura conseguimos búsquedas logarítmicas en función del tamaño y
también en la inserción, sin el riesgo de los casos peores o malos que tienen los árboles
binarios aleatorios.

Caso peor o caso no deseable

16/6/2021 4
Introducción …
Un árbol 2-3, es un árbol que puede tener cero, dos o tres subárboles.

Cuando hay dos subárboles es como un árbol binario, tiene un valor en la raíz que
separa a los valores de los dos subárboles.

Si tiene tres subárboles hay dos valores en la raíz, y todos los valores de los tres
subárboles son menores que los dos, entre los dos o mayor que los dos
respectivamente.

Definición:
Un árbol 2-3 sobre un tipo de datos “T” es uno de los siguientes tres casos:
a. Vacío
b. (x, I, D) donde x Є T y I y D son árboles 2-3.
c. (x, y, I, C, D) donde x, y Є T, y I, C D son árboles 2-3.
Se cumple:
Si A = (x, I, D), todos los valores de izq(A) ≤ valor(A) ≤ todos los valores de der(A)
Si A = (x, y, I, C, D),
todos los valores de I ≤ x ≤ todos los valores C ≤ y ≤ todos los valores de D
16/6/2021 5
Introducción …
Definición:

Un árbol 2-3 sobre un tipo de datos “T” es uno de los siguientes tres casos:

a. Vacío
b. (x, I, D) donde x Є T y I y D son árboles 2-3.
c. (x, y, I, C, D) donde x, y Є T, y I, C, D son árboles 2-3.

A=Ø A 5 A 5│7 A 15 │ 27

3 8 3 6 8
I
I C D
5│ 8 20 31
7 9 I D

D
18 C 23
6
II IC ID

16/6/2021 6
Introducción …
Árbol 2-3 bien formado:
Decimos que el árbol está bien formado, “si es vacío” o “si todos los
subárboles tienen la misma altura y están bien formados”. Esto equivale a decir que el
camino hasta cualquier hoja siempre tiene el mismo largo.

Cuando tengamos dos subárboles, por lo menos, podemos garantizar que tendremos
una búsqueda logarítmica.

A 15 │ 27 A 15 │ 27

5│ 8 20 31 5│ 8 20 31

3 6 12 18 23 28 43 3 6 12 23 28 43

Árbol 2-3 “bien formado” Árbol 2-3 “mal formado”


16/6/2021 7
Algoritmo de búsqueda en un árbol 2-3
L00 buscar(t, A) =
L01 Si (A = Ø)“NO”
L02 Sino
L03 Si A = (x, I, D) |* “A” es binario *│
L04 Si (t = x) “SI”
L05 Sino Si (t < x) buscar (t, I)
L06 Sino buscar (t, D)
L07 Sino Sea A = (x, y, I, C, D) |* “A” es ternario *│
L08 Si (t = x │ t = y) “SI”
L09 Sino Si (t < x) buscar (t, I)
L10 Sino Si (t < y) buscar (t, C)
L11 Sino buscar (t, D)

A 15 │ 27 Ej. a)
buscar(3, A) = buscar(3, (5,8,(3,Ø,Ø), (6,Ø,Ø), (12,Ø,Ø)))
= buscar(3, (3,Ø,Ø))
= “SI”
5│ 8 20 31
Ej. b)
buscar(21, A) = buscar(21, (20,(18,Ø,Ø), (23,Ø,Ø)))
= buscar(21, (23,Ø,Ø))
3 6 12 18 23 28 43
= buscar(21, Ø)
= “NO”
16/6/2021 8
Visualización de algoritmos
Demo: gt.jar
Para Arboles 2-3 (gt.jar): (Comenius University - Eslovenia)
https://people.ksp.sk/~kuko/gnarley-trees/

Buscar elementos

16/6/2021 9
Costo de búsqueda en un árbol 2-3 bien formado para el peor caso:
“No existe el elemento o bien es un nodo terminal”
Altura Esquema A 2-3 Nro de elementos que
se dispone totalmente almacena (n)
(a)
Binario Ternario Binario Ternario
(n) (n)
0  (Vacío)  (Vacío) 0=20-1 0=30-1

1 1=21-1 2=31-1

2 3=22-1 8=32-1

3 7=23-1 26=33-1

… …. ….. … …

n = 2a-1 n = 3a-1
a (*) (**)
… … … … … … … … … … … …

a es la altura del arbol2-3, o sea que también es la cantidad de comparaciones para decidir si un elemento
no existe o bien es un elemento terminal:
Despejando a de ambas expresiones (*) y (**) se tiene: log3 (n+1) ≤ a ≤ log2 (n+1)
Ej: Para almacenar 80 elementos será necesario un árbol 2-3 donde: log3 (81) ≤ a ≤ log2 (81)
4,32 ≤ a ≤ 9
Costo de búsqueda en un árbol 2-3
para el peor caso
log3 (n) ≤ a ≤ log2 (n)
a (altura)

Árbol binario construido al azar: a = 1.386 lg(n)

Árbol 2: a = log2 (n). Coincide con la altura del


árbol binario bien equilibrado: a = log2(n + 1)

log3 (n) ≤ a ≤ log2 (n)

Árbol 3: a = log3 (n)

n (nodos)

16/6/2021 11
Visualización de algoritmos
Demo: gt.jar
Para Arboles 2-3 (gt.jar): (Comenius University - Eslovenia)
https://people.ksp.sk/~kuko/gnarley-trees/

Insertar
Elementos : [82, 35, 24, 88, 5, 58, 57, 37]

16/6/2021 12
Algoritmo de inserción
La inserción en “(x, I, D)” procede como la inserción en el árbol binario aleatorio, excepto que
preguntamos si la nueva inserción hizo crecer en altura el subárbol.

Si no creció, podemos aceptar el subárbol como está.

Si creció, D y los nuevos subárboles resultados de la inserción en I tienen la misma altura,


entonces podemos levantarlos un nivel (veremos que son dos) y formar un árbol con dos
claves y tres subárboles.

La inserción en “(x, y, I, C, D)” también empieza con la inserción en uno de los subárboles.

Si no creció aceptamos el subárbol como está.

Si creció, tiene que tener dos subárboles, cada uno con la misma altura que los otros
subárboles. Con estos cuatro subárboles y dos claves formamos el nuevo árbol con dos
subárboles con altura aumentada en uno a la altura inicial.

“insertar1(t, A)”, devuelve un árbol 2-3 bien formado, con la información que si es más alto que el
árbol original o no. (la variable c)

16/6/2021 13
Algoritmo de inserción en árbol 2-3
L00 Insertar1(t, A) =
L01 Si (A = Ø)((t, Ø, Ø), 1) |* 0: NO CRECIO 1: CRECIO *| |* L01 *│
L02 Sino Si A = (x, I, D)|* “A” es binario *│
L03 Si (t = x) (A, 0) |* “t”, ya existe en el árbol “A” *│
L04 Sino Si (t < x)
L05 Sea (B, c) = insertar1 (t, I)
L06 Si (c = 0) (x, B, D), 0)) |* B: Nuevo árbol izquierdo *│
L07 Sino Sea B = (y, B0 , B1) |* C = 1, CRECIO *│ |* CASO I *│
L08 ((y, x, B0 , B1, D), 0)
L09 Sino Sea (B, c) = insertar1 (t, D)
L10 Si (c = 0) ((x, I, B), 0)
L11 Sino Sea B = (y, B0 , B1) |* CASO II *│
L12 ((x, y, I, B0 , B1), 0)
L13 Sino Sea A = (x, y, I, C, D) |* “A” es ternario *│
L14 Si (t = x │ t = y) (A, 0) |* “t”, ya existe en el árbol “A” . C = 0, NO CRECIO *│
L15 Sino Si (t < x)
L16 Sea (B, c) = insertar1 (t, I)
L17 Si (c = 0) ((x, y, B, C, D), 0))
L18 Sino ((x, B, (y, C, D), 1) |* C = 1, CRECIO – Árbol con 2 hijos*│ |* CASO III *│
L19 Sino Si (t < y)
L20 Sea (B, c) = insertar1 (t, C)
L21 Si (c = 0) (x, y, I, B, D), 0)
L22 Sino
L23 Sea B = (z, B0, B1) |* CASO IV *│
L24 ((z, (x, I, B 0), (y, B1, D)), 1) |* C = 1, CRECIO – Árbol con 2 hijos*│
L25 Sino |* El caso (t > y) es simétrico al caso (t < x)*│
L26 Sea (B, c) = insertar1 (t, D)
L27 Si (c = 0) (x, y, I, C, B), 0)
L28 Sino ((y, (x, I, C), B), 1) |* C = 1, CRECIO – Árbol con 2 hijos*│ |* CASO V *│
16/6/2021 14

También podría gustarte