Arbol 2-3

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 4

ARBOL 2-3

(Un árbol triario Ordenado Balanceado)

Árbol 2-3
Es un árbol que cumple con las siguientes condiciones para garantizar su
adecuado balanceo.
•Todas las hojas se encuentran en el mismo nivel, ordenadas de izquierda a derecha.

•Todos los nodos internos tienen por lo menos 2 subárboles asociados no


vacíos, aunque la raíz derecha este vacía.

•Son un tipo de árbol balanceado por altura (height balanced).Se define como un
árbol en
dónde todos los nodos no-terminales tienen 2 ó 3 descendientes y todos los nodos
hoja tienen la misma longitud (path length) o distancia desde la raíz.

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

La estructura de un árbol 2-3 exige que el crecimiento no se haga a nivel de las


hojas ( aunque la inserción sigue siendo en las hojas), sino a nivel de la raíz, ya
que todas las hojas se deben mantener siempre en el mismo nivel. El proceso
global de inserción comienza por localizar la hoja en la cual se debe agregar el
elemento.

https://nanopdf.com/download/arbol-2-3_pdf

Un árbol 2-3 permite que un nodo tenga dos o tres hijos. Esta característica le permite
conservar el balanceo tras insertar o borrar elementos, por lo que el algoritmo de
búsqueda es casi tan rápido como en un árbol de búsqueda de altura mínima. Por otro
lado, es mucho más fácil de mantenerlo. En un árbol 2-3, los nodos internos han de
tener 2 ó 3 hijos y todas las hojas han de estar al mismo nivel. De forma recursiva se
pueden definir como: A es un árbol 2-3 de altura h si:
• A es un árbol vacío (un árbol 2-3 de altura 0), o
• A es de la forma (r, Ai, Ad), donde r es un nodo y Ai y Ad son árboles 2-3 de altura h-
1, o
• A es de la forma (r, Ai, Ac, Ad), donde r es un nodo y Ai, Ac y Ad son árboles 2-3 de
altura h-1.

Al poder tener los nodos tres hijos no estamos en un caso de un árbol binario. Si todos
los nodos tienen dos hijos coincidirá con un árbol binario completo. Para usar estos
árboles de forma eficiente en las búsquedas, tenemos que introducir un orden entre los
elementos por lo que daremos una nueva definición. Un árbol A es un árbol 2-3 de
búsqueda de altura h si:
• A está vacío, o
• A es de la forma (r, Ai, Ad), donde r contiene un elemento, Ai y Ad son árboles 2-3
de búsqueda de altura h-1 y todos los elementos de Ai son menores que el elemento de r
y todos los elementos de Ad son mayores que el elemento de r, o
• A es de la forma (r, Ai, Ac, Ad), donde r contiene dos elementos (r1 y r2), Ai, Ac y
Ad son árboles 2-3 de búsqueda de altura h-1 y todos los elementos de Ai son menores
que el menor elemento de r, todos los elementos de Ac son mayores que el elemento
menor de r y menores que el elemento mayor de r y todos los elementos de Ad son
mayores que el mayor elemento de r. Esta definición implica que el número de hijos de
un nodo es siempre uno más que el número de elementos que contiene ese nodo. En el
caso de las hojas se permiten uno o dos elementos en el nodo.
Desde ahora nos referiremos a los árboles 2-3 de búsqueda simplemente como árboles 2-3.

BÚSQUEDA DE UN ÁRBOL 2-3


Para buscar un dato en un árbol 2-3, se empieza por la raíz y se va bajando por el árbol
hasta que se encuentre el dato o se llegue a una hoja. El camino que se sigue viene dado
por la comparación entre el dato buscado y el contenido del nodo inspeccionado en cada
momento.
Si el árbol está vacío, el dato no está en el árbol. Si no está vacío, primero lo buscamos
en la raíz. Si es alguno de los elementos de la raíz, ya lo hemos encontrado. En caso
contrario, si el nodo es una hoja, el elemento no está en el árbol y el algoritmo acaba.
Si el nodo no es una hoja se sabe el subárbol por el que seguir la búsqueda comparando
el dato con los elementos del nodo. Si sólo hay un elemento en el nodo y es mayor que
el dato a buscar, seguimos por el hijo derecho, si es menor, por el hijo izquierdo. Si en
el nodo hay dos elementos, r1 y r2 (con r1 ≤ r2) y el dato es menor que r1, buscamos
por el hijo izquierdo. Si el dato es mayor que r1 y menor que r2, buscamos por el hijo
central y si es mayor que r2 buscamos por el hijo derecho.
Como en un árbol 2-3 puede haber más de un elemento en un nodo, se reduce el número
de nodos inspeccionados, aunque el número de comparaciones no sea menor que en un
árbol binario de búsqueda completamente equilibrado. Se puede demostrar que la
complejidad de la búsqueda de O(log2(n)) en el peor caso.
ELIMINACIÓN DE ÁRBOL 2-3
La estrategia de eliminación de datos de un árbol 2-3 es la complementaria a la de
inserción. En la inserción se produce una cadena de divisiones e inserciones hasta que
un nodo no necesite dividirse o se llegue a la raíz.
En el caso de la eliminación de datos, los nodos que se quedan vacíos tras la extracción
de un elemento se fusionan con uno de sus hermanos para formar uno solo. Como el
nodo padre ha perdido un hijo, también ha de tener un elemento menos, por lo que uno
de los elementos del nodo padre pasa al nuevo nodo. La cadena de fusiones seguirá
hasta que un nodo no se quede vacío o se llegue a la raíz
El proceso siempre se va a empezar en un nodo hoja. Por tanto, si el elemento a borrar
está en un nodo interior, se intercambia su valor con el su sucesor en inorden1 . El
sucesor en inorden es el menor elemento del subárbol que queda a la derecha del
elemento a borrar. Este elemento siempre estará en un nodo hoja y su nueva posición en
el árbol respeta el orden. En cambio, la nueva posición del elemento a borrar no está en
orden, pero no importa porque, precisamente, ese elemento va a ser eliminado. Es desde
esa hoja desde donde se empieza el algoritmo de eliminación.
Si en la hoja en la que empezamos la eliminación hay otro elemento, ahí acaba el
proceso, pero si era el único elemento del nodo, éste se queda vacío, una situación que
no está permitida en los árboles 2-3. Para arreglarlo, se fusionan el nodo que se ha
quedado vacío con uno de sus hermanos. Como el nodo padre ha perdido un hijo,
también tiene que tener un elemento menos, por lo que se pasa un elemento del padre al
nuevo nodo. El elemento que se pasa es el antecesor común a los dos nodos fusionados.
Una vez fusionados los nodos, hay dos situaciones posibles. Si el nodo hermano ya
estaba lleno (tenía dos elementos), no puede almacenar otro más. Se divide el nuevo
nodo en dos, que serán hijos del nodo padre y se pasa el elemento medio al nodo padre.
Así, el nodo padre acaba con el mismo número de elementos y de hijos. Simplemente,
se han distribuido los elementos entre los nodos hijos. Hay que hacer notar que no se
puede pasar directamente un valor de uno de los hermanos al nodo que se ha quedado
vacío porque no se mantendría el orden del árbol.
Sin embargo, si el nodo hermano no estaba lleno (sólo tenía un elemento), admite el
nuevo elemento y el nodo padre se queda con un elemento menos. Si el nodo padre se
queda vacío al perder un elemento, se ha de repetir el algoritmo de fusión en el árbol
tantos niveles hacia arriba como haga falta hasta encontrar un nodo que no se quede
vacío o se llegue a la raíz. Si se llega a la raíz y se queda vacía, podemos asegurar que
sólo tiene un hijo. La raíz se elimina y su único hijo pasa a ser la nueva raíz.
ESPECIFICACIÓN DE ÁRBOLES 2-3
La especificación del tipo ARBOL23 es muy similar a la de otros árboles con
propiedades que hemos visto anteriormente, como los árboles binarios de búsqueda y
los árboles AVL. Algunos de los generadores del tipo serán ocultos, esto es, no se
ofrecerán como operaciones al usuario, sino que servirán para construir la
especificación y, en su lugar se ofrecerán las operaciones de inserción y borrado de
elementos que asegurarán que el resultado mantenga las propiedades de los árboles 2-3
respecto al orden y forma del árbol.
Una diferencia respecto a los anteriores tipos es la definición de tres operaciones
generadoras en lugar de dos. ÁrbolVacío es la operación que genera un árbol sin
elementos, como en los tipos anteriores y hay una operación (ConsÁrbol) que genera un
árbol 2-3 cuya raíz tiene un solo elemento y dos hijos y otra (Cons3Árbol) que genera
un árbol 2-3 cuya raíz tiene dos elementos y tres hijos. Estas dos últimas operaciones
son los generadores que se mantienen ocultos al usuario.
Las operaciones de inserción y borrado hacen uso de una operación auxiliar llamada
Equilibrar. Si no se utilizara esa operación, el resultado de insertar un elemento en un
árbol podría producir un árbol con un hijo de una altura superior a la de sus hermanos
en un nivel. En el caso del borrado se podría producir un árbol con un hijo de una altura
inferior a la de sus hermanos en un nivel.
La operación de Equilibrar no sirve para equilibrar cualquier árbol, sino que admite
como entrada un árbol 2-3 en el que uno de sus hijos tiene una altura mayor o menor
que la de sus hermanos en un nivel y su resultado es un árbol 2-3 donde todos los hijos
tienen la misma altura. Si el árbol de entrada ya estaba equilibrado, el resultado es el
mismo árbol.
http://www6.uniovi.es/usr/cesar/Uned/EDA/Apuntes/TAD_apUM_06.pdf

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy