ESTRUCTURA DE DATOS
Contenido:
❑ Tipo abstracto de datos (D2)
❑ Arboles ABB (D13)
❑ Arboles AVL (D33)
❑ Arboles biselados (D47)
Prof. David Candela Arce
TAD
TIPO ABSTRACTO DE DATOS
TIPO ABSTRACTO DE DATOS ÁRBOL BINARIO
▪ La estructura de árbol binario constituye un tipo abstracto de
datos; las operaciones básicas que definen el TAD árbol binario
son las siguientes:
▪ Tipo de dato: dato que se almacena en los nodos del árbol.
Operaciones
1. CrearÁrbol: inicia el árbol como vacío.
2. Construir: crea un árbol con un elemento raíz y dos
ramas, izquierda y derecha que son a su vez árboles.
3. EsVacio: comprueba si el árbol no tiene nodos.
4. Raiz: devuelve el nodo raíz.
TAD ÁRBOL BINARIO
5. Izquierdo: obtiene la rama o subárbol izquierdo de un árbol
dado.
6. Derecho: obtiene la rama o subárbol derecho de un árbol
dado.
7. Borrar: elimina del árbol el nodo con un elemento
determinado.
8. Pertenece: determina si un elemento se encuentra en el árbol.
OPERACIONES EN ARBOLES BINARIOS
Algunas de las operaciones típicas que se realizan en árboles
binarios son éstas:
▪ Determinar su altura.
▪ Determinar su número de elementos.
▪ Hacer una copia.
▪ Visualizar el árbol binario en pantalla o en impresora.
▪ Determinar si dos árboles binarios son idénticos.
▪ Borrar (eliminar el árbol).
▪ Si es un árbol de expresión, evaluar la expresión.
OPERACIONES EN ARBOLES BINARIOS
▪ Todas estas operaciones se pueden realizar recorriendo el árbol
binario de un modo sistemático. El recorrido es la operación de
visita al árbol, o lo que es lo mismo, la visita a cada nodo del
árbol una vez y sólo una. La visita de un árbol es necesaria en
muchas ocasiones, por ejemplo, si se desea imprimir la
información contenida en cada nodo. Existen diferentes formas
de visitar o recorrer un árbol que se estudiarán más adelante.
ESTRUCTURA DE UN ÁRBOL BINARIO
▪ Un árbol binario se construye con nodos. Cada nodo debe
contener el campo dato (datos a almacenar) y dos campos de
enlace (apuntador), uno al subárbol izquierdo (izquierdo, izdo) y
otro al subárbol derecho (derecho, dcho). El valor NULL indica
un árbol o un subárbol vacío.
ESTRUCTURA DE UN ÁRBOL BINARIO
▪ La siguiente figura muestra la representación enlazada de dos
árboles binarios de raíz A. El primero, es un árbol degenerado a
la izquierda; el segundo, es un árbol binario completo de
profundidad 4.
Representación enlazada de dos arboles binarios
Se puede observar que los nodos de un árbol binario que son
hojas se caracterizan por tener sus dos campos de enlace a NULL.
TIPO ABSTRACTO DE DATOS
▪ Un tipo abstracto de datos (TAD) es una descripción lógica de
un conjunto de datos y las operaciones que se pueden realizar
sobre ellos, sin importar cómo se implementen. Se centra en la
abstracción de la información, permitiendo trabajar con los
datos a un nivel superior sin preocuparse por los detalles de
implementación.
MAS DETALLES
▪ Definición:
Un TAD se define por un conjunto de valores que pueden tomar
los datos y las operaciones que los manipulan.
▪ Abstracción:
La abstracción en un TAD se refiere a la independencia de la
implementación. Se puede implementar el mismo TAD de
diferentes maneras sin afectar a los usuarios que lo utilizan,
siempre y cuando la interfaz (las operaciones definidas) se
mantenga consistente.
▪ Ejemplos:
Pila, cola, lista, árbol, grafo.
MAS DETALLES
Componentes:
▪ Interfaz: Conjunto de operaciones que se pueden realizar sobre
los datos.
▪ Implementación: Detalle de cómo se almacenan los datos y
cómo se realizan las operaciones.
Ventajas:
▪ Encapsulación: Permite ocultar la implementación interna del
TAD al usuario, lo que facilita el mantenimiento y la evolución
del código.
▪ Reutilización: Los TADs pueden ser reutilizados en diferentes
contextos y aplicaciones.
▪ Desarrollo modular: El diseño de sistemas complejos se
facilita al dividir la lógica en TADs.
MAS DETALLES
Relación con estructuras de datos:
Un TAD no es lo mismo que una estructura de datos. Un TAD
define una colección de operaciones y valores, mientras que una
estructura de datos es una forma de organizar y almacenar los
datos.
Aplicaciones:
Los TADs son fundamentales en la programación orientada a
objetos, donde se utilizan para modelar objetos y sus operaciones.
En resumen, un TAD es una herramienta poderosa para organizar
y manipular datos, permitiendo una gestión eficiente y flexible de la
información en los sistemas de software.
ARBOLES ABB
ARBOL BINARIO DE BUSQUEDA
ARBOLES ABB
▪ Un árbol binario de búsqueda (ABB) es un árbol binario tal que
el valor de cada nodo es mayor que los valores de su subárbol
izquierdo y es menor que los valores de su subárbol derecho y,
además, ambos subárboles son árboles binarios de búsqueda.
CARACTERÍSTICAS
▪ Un árbol binario de búsqueda (ABB) es un árbol binario con la
propiedad de que todos los elementos almacenados en el
subárbol izquierdo de cualquier nodo x son menores que el
elemento almacenado en x, y todos los elementos almacenados
en el subárbol derecho de x son mayores que el elemento
almacenado en x.
OPERACIONES BÁSICAS EN UN ABB
▪ Los árboles binarios de búsqueda, al igual que los árboles
binarios, tienen naturaleza recursiva y, en consecuencia, las
operaciones sobre los árboles son recursivas, si bien siempre
se tiene la opción de realizarlas de forma iterativa. Estas
operaciones son:
▪ Búsqueda de un nodo. Devuelve la referencia al nodo del árbol,
o NULL.
▪ Inserción de un nodo. Crea un nodo con su dato asociado y lo
añade, en orden, al árbol.
▪ Borrado de un nodo. Busca el nodo del árbol que contiene un
dato y lo quita del árbol. El árbol debe seguir siendo de
búsqueda.
▪ Recorrido de un árbol. Los mismos recorridos de un árbol
binario preorden, inorden y postorden.
BÚSQUEDA EN UN ABB
La búsqueda de un nodo comienza en el nodo raíz y sigue estos
pasos:
▪ 1. La clave buscada se compara con la clave del nodo raíz.
▪ 2. Si las claves son iguales, la búsqueda se detiene.
▪ 3. Si la clave buscada es mayor que la clave raíz, la búsqueda
se reanuda en el subárbol derecho. Si la clave buscada es
menor que la clave raíz, la búsqueda se reanuda con el
subárbol izquierdo.
BÚSQUEDA EN UN ABB
BÚSQUEDA EN UN ABB
Implementación:
▪ Si se desea encontrar un nodo en el árbol que contenga una
información determinada. La función pública buscar() de la
Clase ArbolBinario realiza una llamada a la función privada
buscar() de la clase ArbolBinario que tiene dos parámetros, un
puntero a un Nodo y el dato que se busca. Como resultado, la
función devuelve un puntero al nodo en el que se almacena la
información; en el caso de que la información no se encuentre
se devuelve el valor NULL.
BÚSQUEDA EN UN ABB
▪ El algoritmo de búsqueda es el siguiente:
1. Si el nodo raíz contiene el dato buscado, la tarea es fácil:
el resultado es, simplemente, su referencia y termina el
algoritmo.
2. Si el árbol no está vacío, el subárbol específico por donde
proseguir depende de que el dato requerido sea menor o
mayor que el dato del raíz.
3. El algoritmo termina si el árbol está vacío, en cuyo caso
devuelve NULL.
INSERTAR UN NODO EN UN ABB
▪ Para añadir un nodo al árbol se sigue el camino de búsqueda, y
al final del camino se enlaza el nuevo nodo, por consiguiente,
siempre se inserta como hoja del árbol. El árbol que resulta
después de insertar sigue siendo siempre de búsqueda.
▪ En esencia, el algoritmo de inserción se apoya en la búsqueda
de un elemento, de modo que si se encuentra el elemento
buscado, no es necesario hacer nada (o bien se usa una
estructura de datos auxiliar para almacenar la información); en
caso contrario, se inserta el nuevo elemento justo en el lugar
donde ha acabado la búsqueda (es decir, en el lugar donde
habría estado en el caso de existir).
INSERTAR UN NODO EN UN ABB
▪ Por ejemplo, al árbol de la siguiente figura se le va a añadir el
nodo 8. El proceso describe un camino de búsqueda que
comienza en la raíz 25; el nodo 8 debe estar en el subárbol
izquierdo de 25 (8 < 25). El nodo 10 es la raíz del subárbol
actual, el nodo 8 debe estar en el subárbol izquierdo (8 < 10),
que está actualmente vacío y, por tanto, ha terminado el camino
de búsqueda. El nodo 8 se enlaza como hijo izquierdo del nodo
10.
Inserción en un árbol binario de búsqueda
INSERTAR UN NODO EN UN ABB
INSERTAR UN NODO EN UN ABB
Insertar un elemento con clave 80 en el árbol binario de búsqueda
siguiente:
INSERTAR UN NODO EN UN ABB
A continuación insertar un elemento con clave 36 en el árbol
binario de búsqueda resultante:
IMPLEMENTACIÓN
▪ La función insertar() de la clase ArbolBinario es la interfaz de la
operación, llama la función recursiva que realiza la operación y
devuelve la raíz del nuevo árbol. A esta función interna se le
pasa la raíz actual, a partir de ella se describe el camino de
búsqueda y, al final, se enlaza. En un árbol binario de búsqueda
no hay nodos duplicados, por ello si se encuentra un nodo igual
que el que se desea insertar, se lanza una excepción (o una
nueva función que inserte en una estructura de datos auxiliar
del propio nodo).
ELIMINAR UN NODO EN UN ABB
▪ La operación de borrado de un nodo es también una extensión
de la operación de búsqueda, si bien más compleja que la
inserción, debido a que el nodo a suprimir puede ser cualquiera
y la operación debe mantener la estructura de árbol binario de
búsqueda después de quitar el nodo.
Los pasos a seguir son:
1. Buscar en el árbol la posición de “nodo a eliminar”.
2. Si el nodo a suprimir tiene menos de dos hijos, reajustar los
enlaces de su antecesor.
3. Si el nodo tiene dos hijos (rama izquierda y derecha), es
necesario subir a la posición que éste ocupa el dato más
próximo de sus subárboles (el inmediatamente superior o el
inmediatamente inferior) con el fin de mantener la estructura
árbol binario de búsqueda.
ELIMINAR UN NODO EN UN ABB
▪ Los ejemplos siguientes muestran estas dos circunstancias, el
primero elimina un nodo sin descendientes, el segundo elimina
un nodo que, a su vez, es la raíz de un árbol con dos ramas no
vacías.
ELIMINAR UN NODO EN UN ABB
Suprimir el elemento de la clave 36 del siguiente árbol binario de
búsqueda:
El nodo del árbol donde se encuentra la clave 36 es una hoja, por
ello simplemente se reajustan los enlaces del nodo precedente en
el camino de búsqueda. El árbol resultante:
ELIMINAR UN NODO EN UN ABB
Borrar el elemento de clave 60 del siguiente árbol:
Se reemplaza 60 por el elemento mayor (55) en su subárbol
izquierdo, o por el elemento más pequeño (70) en su subárbol
derecho. Si se opta por reemplazar por el mayor del subárbol
izquierdo, se mueve el 55 al raíz del subárbol y se reajusta el árbol.
IMPLEMENTACIÓN
▪ La función eliminar() de la clase ArbolBinario es el interfaz de la
operación, se le pasa el elemento que se va a buscar en el
árbol para retirar su nodo; llama al método sobrecargado,
privado, eliminar() con la raíz del árbol y el elemento.
▪ La función lo primero que hace es buscar el nodo, siguiendo el
camino de búsqueda. Una vez encontrado, se presentan dos
casos claramente diferenciados. El primero, si el nodo a
eliminar es una hoja o tiene un único descendiente, resulta una
tarea fácil, ya que lo único que hay que hacer es asignar al
enlace del nodo padre (según el camino de búsqueda) el
descendiente del nodo a eliminar.
IMPLEMENTACIÓN
▪ El segundo caso, que el nodo tenga las dos ramas no vacías;
esto exige, para mantener la estructura de árbol de búsqueda,
reemplazar el dato del nodo por la mayor de las claves menores
en el subárbol (otra posible alternativa: reemplazar el dato del
nodo por la menor de las claves mayores). Como las claves
menores están en la rama izquierda, se baja al primer nodo de
la rama izquierda, y se continúa bajando por las ramas derecha
(claves mayores) hasta alcanzar el nodo que no tiene rama
derecha. Éste es el mayor de los menores, cuyo dato debe
reemplazar al del nodo a eliminar. Lo que se hace es copiar el
valor del dato y enlazar su padre con el hijo izquierdo. La
función reemplazar() realiza la tarea descrita.
ARBOLES AVL
ARBOLES ADELSON, VELSKII Y LANDIS
ARBOLES AVL
▪ Un árbol AVL es un tipo especial de árbol binario ideado por los
matemáticos soviéticos Adelson-Velskii y Landis. Fue el primer
árbol de búsqueda binario auto-balanceable que se ideó.
ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL
▪ Un árbol totalmente equilibrado se caracteriza por que la altura
de la rama izquierda es igual que la altura de la rama derecha
para cada uno de los nodos del árbol. Es un árbol ideal, no
siempre se puede conseguir que el árbol esté totalmente
balanceado.
▪ La estructura de datos de árbol equilibrado que se utiliza es la
árbol AVL. El nombre es en honor de Adelson-Velskii-Landis
que fueron los primeros científicos en estudiar las propiedades
de esta estructura de datos. Son árboles ordenados o de
búsqueda que, además, cumplen la condición de balanceo para
cada uno de los nodos.
ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL
ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL
▪ La siguiente figura muestra dos árboles de búsqueda, el de la
izquierda está equilibrado. El de la derecha es el resultado de
insertar la clave 2 en el anterior, según el algoritmo de inserción
en árboles de búsqueda. La inserción provoca que se viole la
condición de equilibrio en el nodo raíz del árbol.
Dos arboles de búsqueda, el de la izquierda equilibrado, el otro no.
ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL
▪ La condición de equilibrio de cada nodo implica una restricción
en las alturas de los subárboles de un árbol AVL. Si Vr es la raíz
de cualquier subárbol de un árbol equilibrado, y h la altura de la
rama izquierda entonces la altura de la rama derecha puede
tomar los valores: h-1, h, h+1.
ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL
▪ Esto aconseja asociar a cada nodo el parámetro denominado
factor de equilibrio o balance de un nodo. Se define como la
altura del subárbol derecho menos la altura del subárbol
izquierdo correspondiente. El factor de equilibrio de cada nodo
en un árbol equilibrado puede tomar los valores: 1, -1 o 0. La
siguiente figura muestra un árbol balanceado con el factor de
equilibrio de cada nodo.
Árbol equilibrado con el factor de equilibrio de cada nodo.
ÁRBOL BINARIO EQUILIBRADO, ARBOLES AVL
INSERCION EN ARBOLES AVL: ROTACIONES
▪ Los árboles equilibrados, árboles AVL, son árboles de búsqueda
y, por consiguiente, para añadir un elemento se ha de seguir el
mismo proceso que en los árboles de búsqueda. Se compara la
nueva clave con la clave de la raíz, continúa por la rama
izquierda o derecha según sea menor o mayor (describe el
camino de búsqueda), termina insertándose como nodo hoja.
Sin embargo, la nueva inserción puede hacer que aumente la
altura de una rama, de manera que cambie el factor de
equilibrio del nodo raíz de dicha rama.
INSERCION EN ARBOLES AVL: ROTACIONES
▪ Este hecho hace necesario que el algoritmo de inserción,
regrese por el camino de búsqueda actualizando el factor de
equilibrio de los nodos. La siguiente figura muestra un árbol
equilibrado y el mismo árbol justo después de la inserción de
una nueva clave que provoca que rompa la condición de
balanceo.
Árbol equilibrado; el mismo después de insertar la clave 17.
INSERCION EN ARBOLES AVL
PROCESO DE INSERCION DE UN
NUEVO NODO
▪ Inicialmente, se aplica el algoritmo de inserción en un árbol de
búsqueda, éste sigue el camino de búsqueda hasta llegar al
fondo del árbol y se enlaza como nodo hoja y con factor de
equilibrio 0. Pero el proceso no puede terminar, es necesario
recorrer el camino de búsqueda en sentido contrario, hacia la
raíz, para actualizar el campo adicional factor de equilibrio.
Después de una inserción sólo los nodos que se encuentran en
el camino de búsqueda pueden haber cambiado el factor de
equilibrio.
PROCESO DE INSERCION DE UN
NUEVO NODO
▪ La actualización del factor de equilibrio (fe) puede hacer que
éste mejore. Esto ocurre cuando un nodo está descompensado
a la izquierda y se inserta el nuevo nodo en la rama izquierda,
al crecer en altura dicha rama el fe se hace 0, se ha mejorado el
equilibrio. La siguiente figura muestra el árbol a) en el que el
nodo 90 tiene fe = 1; en el árbol b), después de insertar el nodo
con clave 60, el nodo 90 tiene fe = 0.
Mejora en la condición de equilibrio al insertar un nuevo nodo con clave 60
CARACTERÍSTICAS
▪ Un árbol AVL es un tipo de árbol de búsqueda binario (BST)
autoequilibrado, lo que significa que mantiene la diferencia
entre las alturas de los subárboles izquierdo y derecho de cada
nodo en un máximo de 1. Esta propiedad asegura que las
operaciones de búsqueda, inserción y eliminación hace que los
árboles AVL sean eficientes para una amplia gama de
aplicaciones.
ARBOLES SPLAY
ARBOLES BISELADOS
ARBOLES BISELADOS
▪ Un árbol biselado o árbol splay es un árbol binario de búsqueda
auto-balanceable, con la propiedad adicional de que a los
elementos accedidos recientemente se accederá más
rápidamente en accesos posteriores.
ARBOLES BISELADOS
▪ En ciencias de la computación, un árbol binario de búsqueda
auto-balanceable o equilibrado es un árbol binario de búsqueda
que intenta mantener su altura, o el número de niveles de nodos
bajo la raíz, tan pequeños como sea posible en todo momento,
automáticamente.
ARBOLES BISELADOS
▪ Esto es importante, ya que muchas operaciones en un árbol de
búsqueda binaria tardan un tiempo proporcional a la altura del
árbol, y los árboles binarios de búsqueda ordinarios pueden
tomar alturas muy grandes en situaciones normales, como
cuando las claves son insertadas en orden.
ARBOLES BISELADOS
▪ Mantener baja la altura se consigue habitualmente realizando
transformaciones en el árbol, como la rotación de árboles, en
momentos clave.
ARBOLES BISELADOS
▪ Un árbol biselado, también conocido como árbol desplegado o
splay tree, es un árbol binario de búsqueda autobalanceable
que tiene la propiedad de que los elementos accedidos
recientemente se pueden acceder más rápidamente en accesos
posteriores. Esta propiedad se logra mediante una operación
llamada biselación, que mueve el nodo accedido a la raíz del
árbol.
MAS DETALLES SOBRE LOS ARBOLES BISELADOS
▪ Autobalanceamiento:
Los árboles biselados se mantienen balanceados a través de la
operación de biselación, lo que ayuda a garantizar un tiempo de
búsqueda, inserción y eliminación eficiente.
MAS DETALLES SOBRE LOS ARBOLES BISELADOS
▪ Biselacion:
La biselación es una operación que traslada un nodo al que se
accede a la raíz del árbol. Esto se logra mediante una serie de
rotaciones que acercan el nodo a la raíz.
MAS DETALLES SOBRE LOS ARBOLES BISELADOS
▪ Eficiencia en accesos recientes:
Al mover los nodos accedidos recientemente a la raíz, los
árboles biselados mejoran el rendimiento para los accesos
posteriores a esos mismos nodos.
MAS DETALLES SOBRE LOS ARBOLES BISELADOS
▪ Aplicaciones:
Los árboles biselados se pueden utilizar en situaciones donde
se espera que los accesos a ciertos elementos sean más
frecuentes que otros, como en la implementación de caches o
la gestión de datos que se utilizan con mayor frecuencia.
COMPARACIÓN CON OTROS TIPOS DE ARBOLES
▪ Arboles binarios de búsqueda (ABB):
Los árboles binarios de búsqueda son un tipo de árbol binario
que se utiliza para almacenar y recuperar datos de forma
eficiente. Los árboles biselados son una extensión de los ABB
que incorporan la propiedad de autobalanceo mediante la
operación de biselación.
COMPARACIÓN CON OTROS TIPOS DE ARBOLES
▪ Arboles AVL:
Los árboles AVL son otro tipo de árbol binario de búsqueda
autobalanceable. La diferencia principal entre los árboles
biselados y los árboles AVL es que los árboles biselados se
mantienen balanceados moviendo los nodos a la raíz, mientras
que los árboles AVL se mantienen balanceados mediante
rotaciones.
CARACTERÍSTICAS
▪ Los árboles biselados, también conocidos como árboles splay,
son árboles binarios de búsqueda autobalanceables que tienen
la peculiaridad de que los elementos accedidos recientemente
se accederán más rápidamente en accesos posteriores. Esta
propiedad se logra moviendo el nodo accedido hacia la raíz del
árbol mediante una serie de rotaciones, lo que mejora el
rendimiento de las operaciones de búsqueda.
Tipo de dato abstracto en una extructura de datos

Más contenido relacionado

PPTX
Programación 3: árboles binarios y ordenados
PDF
Arboles binarios en una extructura de datos
PPTX
Presentación Árbol Binario
PPTX
Estructura de dato unidad 4
PDF
Presentación Arbol- Estructura de datos .pdf
PPTX
Estructura de Datos - Estructuras no lineales
PPTX
Estructura de Datos - Unidad IV: Estructuras no Lineales
PPTX
Unidad cuatro estructura de datos
Programación 3: árboles binarios y ordenados
Arboles binarios en una extructura de datos
Presentación Árbol Binario
Estructura de dato unidad 4
Presentación Arbol- Estructura de datos .pdf
Estructura de Datos - Estructuras no lineales
Estructura de Datos - Unidad IV: Estructuras no Lineales
Unidad cuatro estructura de datos

Similar a Tipo de dato abstracto en una extructura de datos (20)

PPT
Organizacin secuencialindexadaencadenada
PPTX
Exploracion-de-Arboles-Avanzados-AVL-B-y-B.pptx
PPT
áRboles binarios
PPT
áRboles binarios
DOCX
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
PDF
Dylan_Medina_Arbol.pdf
PDF
Informe de Arboles.pdf
PPTX
Arboles binarios
PPTX
Arboles binarios
PDF
Abb árboles de búsqueda binaria
PPTX
Arbolesclase1fhdgdjdgstgjtyygdggddjy.pptx
PPTX
Estructura de datos
PDF
Arbol en programación ALAN MENDEZ.pdf
PPTX
Estructura de datos unidad 4 y 5
PPTX
Arboles Binarios y Arboles Binarios de Busqueda
PDF
DECLARACION DE ARBOLES.pdf
PPT
Objetivo 6-2.ppt
PPTX
Operaciones Básicas con Árboles
Organizacin secuencialindexadaencadenada
Exploracion-de-Arboles-Avanzados-AVL-B-y-B.pptx
áRboles binarios
áRboles binarios
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Dylan_Medina_Arbol.pdf
Informe de Arboles.pdf
Arboles binarios
Arboles binarios
Abb árboles de búsqueda binaria
Arbolesclase1fhdgdjdgstgjtyygdggddjy.pptx
Estructura de datos
Arbol en programación ALAN MENDEZ.pdf
Estructura de datos unidad 4 y 5
Arboles Binarios y Arboles Binarios de Busqueda
DECLARACION DE ARBOLES.pdf
Objetivo 6-2.ppt
Operaciones Básicas con Árboles
Publicidad

Último (9)

PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PDF
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
PPTX
Control de seguridad en los sitios web.pptx
PPTX
Implementación equipo monitor12.08.25.pptx
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PDF
Presentacion de compiladores e interpretes
PPTX
hojas_de_calculo_aplicado para microsoft office
PPTX
presentación de introducción a las metodologías agiles .pptx
PPTX
PROPIEDADES Y METODOS DE PrOO CON PYTHON
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
Control de seguridad en los sitios web.pptx
Implementación equipo monitor12.08.25.pptx
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
Presentacion de compiladores e interpretes
hojas_de_calculo_aplicado para microsoft office
presentación de introducción a las metodologías agiles .pptx
PROPIEDADES Y METODOS DE PrOO CON PYTHON
Publicidad

Tipo de dato abstracto en una extructura de datos

  • 1. ESTRUCTURA DE DATOS Contenido: ❑ Tipo abstracto de datos (D2) ❑ Arboles ABB (D13) ❑ Arboles AVL (D33) ❑ Arboles biselados (D47) Prof. David Candela Arce
  • 3. TIPO ABSTRACTO DE DATOS ÁRBOL BINARIO ▪ La estructura de árbol binario constituye un tipo abstracto de datos; las operaciones básicas que definen el TAD árbol binario son las siguientes: ▪ Tipo de dato: dato que se almacena en los nodos del árbol. Operaciones 1. CrearÁrbol: inicia el árbol como vacío. 2. Construir: crea un árbol con un elemento raíz y dos ramas, izquierda y derecha que son a su vez árboles. 3. EsVacio: comprueba si el árbol no tiene nodos. 4. Raiz: devuelve el nodo raíz.
  • 4. TAD ÁRBOL BINARIO 5. Izquierdo: obtiene la rama o subárbol izquierdo de un árbol dado. 6. Derecho: obtiene la rama o subárbol derecho de un árbol dado. 7. Borrar: elimina del árbol el nodo con un elemento determinado. 8. Pertenece: determina si un elemento se encuentra en el árbol.
  • 5. OPERACIONES EN ARBOLES BINARIOS Algunas de las operaciones típicas que se realizan en árboles binarios son éstas: ▪ Determinar su altura. ▪ Determinar su número de elementos. ▪ Hacer una copia. ▪ Visualizar el árbol binario en pantalla o en impresora. ▪ Determinar si dos árboles binarios son idénticos. ▪ Borrar (eliminar el árbol). ▪ Si es un árbol de expresión, evaluar la expresión.
  • 6. OPERACIONES EN ARBOLES BINARIOS ▪ Todas estas operaciones se pueden realizar recorriendo el árbol binario de un modo sistemático. El recorrido es la operación de visita al árbol, o lo que es lo mismo, la visita a cada nodo del árbol una vez y sólo una. La visita de un árbol es necesaria en muchas ocasiones, por ejemplo, si se desea imprimir la información contenida en cada nodo. Existen diferentes formas de visitar o recorrer un árbol que se estudiarán más adelante.
  • 7. ESTRUCTURA DE UN ÁRBOL BINARIO ▪ Un árbol binario se construye con nodos. Cada nodo debe contener el campo dato (datos a almacenar) y dos campos de enlace (apuntador), uno al subárbol izquierdo (izquierdo, izdo) y otro al subárbol derecho (derecho, dcho). El valor NULL indica un árbol o un subárbol vacío.
  • 8. ESTRUCTURA DE UN ÁRBOL BINARIO ▪ La siguiente figura muestra la representación enlazada de dos árboles binarios de raíz A. El primero, es un árbol degenerado a la izquierda; el segundo, es un árbol binario completo de profundidad 4. Representación enlazada de dos arboles binarios Se puede observar que los nodos de un árbol binario que son hojas se caracterizan por tener sus dos campos de enlace a NULL.
  • 9. TIPO ABSTRACTO DE DATOS ▪ Un tipo abstracto de datos (TAD) es una descripción lógica de un conjunto de datos y las operaciones que se pueden realizar sobre ellos, sin importar cómo se implementen. Se centra en la abstracción de la información, permitiendo trabajar con los datos a un nivel superior sin preocuparse por los detalles de implementación.
  • 10. MAS DETALLES ▪ Definición: Un TAD se define por un conjunto de valores que pueden tomar los datos y las operaciones que los manipulan. ▪ Abstracción: La abstracción en un TAD se refiere a la independencia de la implementación. Se puede implementar el mismo TAD de diferentes maneras sin afectar a los usuarios que lo utilizan, siempre y cuando la interfaz (las operaciones definidas) se mantenga consistente. ▪ Ejemplos: Pila, cola, lista, árbol, grafo.
  • 11. MAS DETALLES Componentes: ▪ Interfaz: Conjunto de operaciones que se pueden realizar sobre los datos. ▪ Implementación: Detalle de cómo se almacenan los datos y cómo se realizan las operaciones. Ventajas: ▪ Encapsulación: Permite ocultar la implementación interna del TAD al usuario, lo que facilita el mantenimiento y la evolución del código. ▪ Reutilización: Los TADs pueden ser reutilizados en diferentes contextos y aplicaciones. ▪ Desarrollo modular: El diseño de sistemas complejos se facilita al dividir la lógica en TADs.
  • 12. MAS DETALLES Relación con estructuras de datos: Un TAD no es lo mismo que una estructura de datos. Un TAD define una colección de operaciones y valores, mientras que una estructura de datos es una forma de organizar y almacenar los datos. Aplicaciones: Los TADs son fundamentales en la programación orientada a objetos, donde se utilizan para modelar objetos y sus operaciones. En resumen, un TAD es una herramienta poderosa para organizar y manipular datos, permitiendo una gestión eficiente y flexible de la información en los sistemas de software.
  • 14. ARBOLES ABB ▪ Un árbol binario de búsqueda (ABB) es un árbol binario tal que el valor de cada nodo es mayor que los valores de su subárbol izquierdo y es menor que los valores de su subárbol derecho y, además, ambos subárboles son árboles binarios de búsqueda.
  • 15. CARACTERÍSTICAS ▪ Un árbol binario de búsqueda (ABB) es un árbol binario con la propiedad de que todos los elementos almacenados en el subárbol izquierdo de cualquier nodo x son menores que el elemento almacenado en x, y todos los elementos almacenados en el subárbol derecho de x son mayores que el elemento almacenado en x.
  • 16. OPERACIONES BÁSICAS EN UN ABB ▪ Los árboles binarios de búsqueda, al igual que los árboles binarios, tienen naturaleza recursiva y, en consecuencia, las operaciones sobre los árboles son recursivas, si bien siempre se tiene la opción de realizarlas de forma iterativa. Estas operaciones son: ▪ Búsqueda de un nodo. Devuelve la referencia al nodo del árbol, o NULL. ▪ Inserción de un nodo. Crea un nodo con su dato asociado y lo añade, en orden, al árbol. ▪ Borrado de un nodo. Busca el nodo del árbol que contiene un dato y lo quita del árbol. El árbol debe seguir siendo de búsqueda. ▪ Recorrido de un árbol. Los mismos recorridos de un árbol binario preorden, inorden y postorden.
  • 17. BÚSQUEDA EN UN ABB La búsqueda de un nodo comienza en el nodo raíz y sigue estos pasos: ▪ 1. La clave buscada se compara con la clave del nodo raíz. ▪ 2. Si las claves son iguales, la búsqueda se detiene. ▪ 3. Si la clave buscada es mayor que la clave raíz, la búsqueda se reanuda en el subárbol derecho. Si la clave buscada es menor que la clave raíz, la búsqueda se reanuda con el subárbol izquierdo.
  • 19. BÚSQUEDA EN UN ABB Implementación: ▪ Si se desea encontrar un nodo en el árbol que contenga una información determinada. La función pública buscar() de la Clase ArbolBinario realiza una llamada a la función privada buscar() de la clase ArbolBinario que tiene dos parámetros, un puntero a un Nodo y el dato que se busca. Como resultado, la función devuelve un puntero al nodo en el que se almacena la información; en el caso de que la información no se encuentre se devuelve el valor NULL.
  • 20. BÚSQUEDA EN UN ABB ▪ El algoritmo de búsqueda es el siguiente: 1. Si el nodo raíz contiene el dato buscado, la tarea es fácil: el resultado es, simplemente, su referencia y termina el algoritmo. 2. Si el árbol no está vacío, el subárbol específico por donde proseguir depende de que el dato requerido sea menor o mayor que el dato del raíz. 3. El algoritmo termina si el árbol está vacío, en cuyo caso devuelve NULL.
  • 21. INSERTAR UN NODO EN UN ABB ▪ Para añadir un nodo al árbol se sigue el camino de búsqueda, y al final del camino se enlaza el nuevo nodo, por consiguiente, siempre se inserta como hoja del árbol. El árbol que resulta después de insertar sigue siendo siempre de búsqueda. ▪ En esencia, el algoritmo de inserción se apoya en la búsqueda de un elemento, de modo que si se encuentra el elemento buscado, no es necesario hacer nada (o bien se usa una estructura de datos auxiliar para almacenar la información); en caso contrario, se inserta el nuevo elemento justo en el lugar donde ha acabado la búsqueda (es decir, en el lugar donde habría estado en el caso de existir).
  • 22. INSERTAR UN NODO EN UN ABB ▪ Por ejemplo, al árbol de la siguiente figura se le va a añadir el nodo 8. El proceso describe un camino de búsqueda que comienza en la raíz 25; el nodo 8 debe estar en el subárbol izquierdo de 25 (8 < 25). El nodo 10 es la raíz del subárbol actual, el nodo 8 debe estar en el subárbol izquierdo (8 < 10), que está actualmente vacío y, por tanto, ha terminado el camino de búsqueda. El nodo 8 se enlaza como hijo izquierdo del nodo 10. Inserción en un árbol binario de búsqueda
  • 23. INSERTAR UN NODO EN UN ABB
  • 24. INSERTAR UN NODO EN UN ABB Insertar un elemento con clave 80 en el árbol binario de búsqueda siguiente:
  • 25. INSERTAR UN NODO EN UN ABB A continuación insertar un elemento con clave 36 en el árbol binario de búsqueda resultante:
  • 26. IMPLEMENTACIÓN ▪ La función insertar() de la clase ArbolBinario es la interfaz de la operación, llama la función recursiva que realiza la operación y devuelve la raíz del nuevo árbol. A esta función interna se le pasa la raíz actual, a partir de ella se describe el camino de búsqueda y, al final, se enlaza. En un árbol binario de búsqueda no hay nodos duplicados, por ello si se encuentra un nodo igual que el que se desea insertar, se lanza una excepción (o una nueva función que inserte en una estructura de datos auxiliar del propio nodo).
  • 27. ELIMINAR UN NODO EN UN ABB ▪ La operación de borrado de un nodo es también una extensión de la operación de búsqueda, si bien más compleja que la inserción, debido a que el nodo a suprimir puede ser cualquiera y la operación debe mantener la estructura de árbol binario de búsqueda después de quitar el nodo. Los pasos a seguir son: 1. Buscar en el árbol la posición de “nodo a eliminar”. 2. Si el nodo a suprimir tiene menos de dos hijos, reajustar los enlaces de su antecesor. 3. Si el nodo tiene dos hijos (rama izquierda y derecha), es necesario subir a la posición que éste ocupa el dato más próximo de sus subárboles (el inmediatamente superior o el inmediatamente inferior) con el fin de mantener la estructura árbol binario de búsqueda.
  • 28. ELIMINAR UN NODO EN UN ABB ▪ Los ejemplos siguientes muestran estas dos circunstancias, el primero elimina un nodo sin descendientes, el segundo elimina un nodo que, a su vez, es la raíz de un árbol con dos ramas no vacías.
  • 29. ELIMINAR UN NODO EN UN ABB Suprimir el elemento de la clave 36 del siguiente árbol binario de búsqueda: El nodo del árbol donde se encuentra la clave 36 es una hoja, por ello simplemente se reajustan los enlaces del nodo precedente en el camino de búsqueda. El árbol resultante:
  • 30. ELIMINAR UN NODO EN UN ABB Borrar el elemento de clave 60 del siguiente árbol: Se reemplaza 60 por el elemento mayor (55) en su subárbol izquierdo, o por el elemento más pequeño (70) en su subárbol derecho. Si se opta por reemplazar por el mayor del subárbol izquierdo, se mueve el 55 al raíz del subárbol y se reajusta el árbol.
  • 31. IMPLEMENTACIÓN ▪ La función eliminar() de la clase ArbolBinario es el interfaz de la operación, se le pasa el elemento que se va a buscar en el árbol para retirar su nodo; llama al método sobrecargado, privado, eliminar() con la raíz del árbol y el elemento. ▪ La función lo primero que hace es buscar el nodo, siguiendo el camino de búsqueda. Una vez encontrado, se presentan dos casos claramente diferenciados. El primero, si el nodo a eliminar es una hoja o tiene un único descendiente, resulta una tarea fácil, ya que lo único que hay que hacer es asignar al enlace del nodo padre (según el camino de búsqueda) el descendiente del nodo a eliminar.
  • 32. IMPLEMENTACIÓN ▪ El segundo caso, que el nodo tenga las dos ramas no vacías; esto exige, para mantener la estructura de árbol de búsqueda, reemplazar el dato del nodo por la mayor de las claves menores en el subárbol (otra posible alternativa: reemplazar el dato del nodo por la menor de las claves mayores). Como las claves menores están en la rama izquierda, se baja al primer nodo de la rama izquierda, y se continúa bajando por las ramas derecha (claves mayores) hasta alcanzar el nodo que no tiene rama derecha. Éste es el mayor de los menores, cuyo dato debe reemplazar al del nodo a eliminar. Lo que se hace es copiar el valor del dato y enlazar su padre con el hijo izquierdo. La función reemplazar() realiza la tarea descrita.
  • 33. ARBOLES AVL ARBOLES ADELSON, VELSKII Y LANDIS
  • 34. ARBOLES AVL ▪ Un árbol AVL es un tipo especial de árbol binario ideado por los matemáticos soviéticos Adelson-Velskii y Landis. Fue el primer árbol de búsqueda binario auto-balanceable que se ideó.
  • 35. ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL ▪ Un árbol totalmente equilibrado se caracteriza por que la altura de la rama izquierda es igual que la altura de la rama derecha para cada uno de los nodos del árbol. Es un árbol ideal, no siempre se puede conseguir que el árbol esté totalmente balanceado. ▪ La estructura de datos de árbol equilibrado que se utiliza es la árbol AVL. El nombre es en honor de Adelson-Velskii-Landis que fueron los primeros científicos en estudiar las propiedades de esta estructura de datos. Son árboles ordenados o de búsqueda que, además, cumplen la condición de balanceo para cada uno de los nodos.
  • 37. ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL ▪ La siguiente figura muestra dos árboles de búsqueda, el de la izquierda está equilibrado. El de la derecha es el resultado de insertar la clave 2 en el anterior, según el algoritmo de inserción en árboles de búsqueda. La inserción provoca que se viole la condición de equilibrio en el nodo raíz del árbol. Dos arboles de búsqueda, el de la izquierda equilibrado, el otro no.
  • 38. ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL ▪ La condición de equilibrio de cada nodo implica una restricción en las alturas de los subárboles de un árbol AVL. Si Vr es la raíz de cualquier subárbol de un árbol equilibrado, y h la altura de la rama izquierda entonces la altura de la rama derecha puede tomar los valores: h-1, h, h+1.
  • 39. ÁRBOL BINARIO EQUILIBRADO. ARBOLES AVL ▪ Esto aconseja asociar a cada nodo el parámetro denominado factor de equilibrio o balance de un nodo. Se define como la altura del subárbol derecho menos la altura del subárbol izquierdo correspondiente. El factor de equilibrio de cada nodo en un árbol equilibrado puede tomar los valores: 1, -1 o 0. La siguiente figura muestra un árbol balanceado con el factor de equilibrio de cada nodo. Árbol equilibrado con el factor de equilibrio de cada nodo.
  • 41. INSERCION EN ARBOLES AVL: ROTACIONES ▪ Los árboles equilibrados, árboles AVL, son árboles de búsqueda y, por consiguiente, para añadir un elemento se ha de seguir el mismo proceso que en los árboles de búsqueda. Se compara la nueva clave con la clave de la raíz, continúa por la rama izquierda o derecha según sea menor o mayor (describe el camino de búsqueda), termina insertándose como nodo hoja. Sin embargo, la nueva inserción puede hacer que aumente la altura de una rama, de manera que cambie el factor de equilibrio del nodo raíz de dicha rama.
  • 42. INSERCION EN ARBOLES AVL: ROTACIONES ▪ Este hecho hace necesario que el algoritmo de inserción, regrese por el camino de búsqueda actualizando el factor de equilibrio de los nodos. La siguiente figura muestra un árbol equilibrado y el mismo árbol justo después de la inserción de una nueva clave que provoca que rompa la condición de balanceo. Árbol equilibrado; el mismo después de insertar la clave 17.
  • 44. PROCESO DE INSERCION DE UN NUEVO NODO ▪ Inicialmente, se aplica el algoritmo de inserción en un árbol de búsqueda, éste sigue el camino de búsqueda hasta llegar al fondo del árbol y se enlaza como nodo hoja y con factor de equilibrio 0. Pero el proceso no puede terminar, es necesario recorrer el camino de búsqueda en sentido contrario, hacia la raíz, para actualizar el campo adicional factor de equilibrio. Después de una inserción sólo los nodos que se encuentran en el camino de búsqueda pueden haber cambiado el factor de equilibrio.
  • 45. PROCESO DE INSERCION DE UN NUEVO NODO ▪ La actualización del factor de equilibrio (fe) puede hacer que éste mejore. Esto ocurre cuando un nodo está descompensado a la izquierda y se inserta el nuevo nodo en la rama izquierda, al crecer en altura dicha rama el fe se hace 0, se ha mejorado el equilibrio. La siguiente figura muestra el árbol a) en el que el nodo 90 tiene fe = 1; en el árbol b), después de insertar el nodo con clave 60, el nodo 90 tiene fe = 0. Mejora en la condición de equilibrio al insertar un nuevo nodo con clave 60
  • 46. CARACTERÍSTICAS ▪ Un árbol AVL es un tipo de árbol de búsqueda binario (BST) autoequilibrado, lo que significa que mantiene la diferencia entre las alturas de los subárboles izquierdo y derecho de cada nodo en un máximo de 1. Esta propiedad asegura que las operaciones de búsqueda, inserción y eliminación hace que los árboles AVL sean eficientes para una amplia gama de aplicaciones.
  • 48. ARBOLES BISELADOS ▪ Un árbol biselado o árbol splay es un árbol binario de búsqueda auto-balanceable, con la propiedad adicional de que a los elementos accedidos recientemente se accederá más rápidamente en accesos posteriores.
  • 49. ARBOLES BISELADOS ▪ En ciencias de la computación, un árbol binario de búsqueda auto-balanceable o equilibrado es un árbol binario de búsqueda que intenta mantener su altura, o el número de niveles de nodos bajo la raíz, tan pequeños como sea posible en todo momento, automáticamente.
  • 50. ARBOLES BISELADOS ▪ Esto es importante, ya que muchas operaciones en un árbol de búsqueda binaria tardan un tiempo proporcional a la altura del árbol, y los árboles binarios de búsqueda ordinarios pueden tomar alturas muy grandes en situaciones normales, como cuando las claves son insertadas en orden.
  • 51. ARBOLES BISELADOS ▪ Mantener baja la altura se consigue habitualmente realizando transformaciones en el árbol, como la rotación de árboles, en momentos clave.
  • 52. ARBOLES BISELADOS ▪ Un árbol biselado, también conocido como árbol desplegado o splay tree, es un árbol binario de búsqueda autobalanceable que tiene la propiedad de que los elementos accedidos recientemente se pueden acceder más rápidamente en accesos posteriores. Esta propiedad se logra mediante una operación llamada biselación, que mueve el nodo accedido a la raíz del árbol.
  • 53. MAS DETALLES SOBRE LOS ARBOLES BISELADOS ▪ Autobalanceamiento: Los árboles biselados se mantienen balanceados a través de la operación de biselación, lo que ayuda a garantizar un tiempo de búsqueda, inserción y eliminación eficiente.
  • 54. MAS DETALLES SOBRE LOS ARBOLES BISELADOS ▪ Biselacion: La biselación es una operación que traslada un nodo al que se accede a la raíz del árbol. Esto se logra mediante una serie de rotaciones que acercan el nodo a la raíz.
  • 55. MAS DETALLES SOBRE LOS ARBOLES BISELADOS ▪ Eficiencia en accesos recientes: Al mover los nodos accedidos recientemente a la raíz, los árboles biselados mejoran el rendimiento para los accesos posteriores a esos mismos nodos.
  • 56. MAS DETALLES SOBRE LOS ARBOLES BISELADOS ▪ Aplicaciones: Los árboles biselados se pueden utilizar en situaciones donde se espera que los accesos a ciertos elementos sean más frecuentes que otros, como en la implementación de caches o la gestión de datos que se utilizan con mayor frecuencia.
  • 57. COMPARACIÓN CON OTROS TIPOS DE ARBOLES ▪ Arboles binarios de búsqueda (ABB): Los árboles binarios de búsqueda son un tipo de árbol binario que se utiliza para almacenar y recuperar datos de forma eficiente. Los árboles biselados son una extensión de los ABB que incorporan la propiedad de autobalanceo mediante la operación de biselación.
  • 58. COMPARACIÓN CON OTROS TIPOS DE ARBOLES ▪ Arboles AVL: Los árboles AVL son otro tipo de árbol binario de búsqueda autobalanceable. La diferencia principal entre los árboles biselados y los árboles AVL es que los árboles biselados se mantienen balanceados moviendo los nodos a la raíz, mientras que los árboles AVL se mantienen balanceados mediante rotaciones.
  • 59. CARACTERÍSTICAS ▪ Los árboles biselados, también conocidos como árboles splay, son árboles binarios de búsqueda autobalanceables que tienen la peculiaridad de que los elementos accedidos recientemente se accederán más rápidamente en accesos posteriores. Esta propiedad se logra moviendo el nodo accedido hacia la raíz del árbol mediante una serie de rotaciones, lo que mejora el rendimiento de las operaciones de búsqueda.