Arbol2 3
Arbol2 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.
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.
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
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)
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.
La inserción en “(x, y, I, C, D)” también empieza con la inserción en uno de los subárboles.
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