Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

ERDD Arboles1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 55

ESTRUCTURA Y REPRESENTACIÓN

DE DATOS

Ing. Sharon L. Pérez


RECURSIVIDAD
RECURSIVIDAD

• Es un método en el cual
la solución a un problema
se alcanza resolviendo
instancias más pequeñas
del mismo.
COMPONENTES DE UNA FUNCIÓN
RECURSIVA

Caso Base Caso Recursivo

Aquella situación que pueda resolverse Es una situación que para poder
directamente entregando un resultado resolverse necesita resolver antes una
sin necesidad de hacer llamadas instancia más pequeña de sí misma.
recursivas.
FACTORIAL

• Un factorial es la
multiplicación de los
N números naturales
antecesores a X.

5! = 5 · 4 · 3 · 2 · 1
FACTORIAL

• El proceso recursivo para obtener el factorial de 3, sería:

f(3) = 3 · f(2)

f(2) = 2 · f(1)

f(1) = 1 · f(0)

f(0) = 1
FACTORIAL

• La implementación recursiva
de la función factorial sería:
NÚMEROS DE
FIBONACCI

• Es una sucesión infinita de


números naturales donde
cada número se calcula
sumando los dos anteriores
a él.
Fib fib(3) = fib(2) + fib(1)

Fib fib(2) = fib(1) + fib(0)


NÚMEROS DE
FIBONACCI
Fib fib(1) = 1

Fib fib(0) = 0
NÚMEROS DE FIBONACCI
RESUMEN

• La recursión es una herramienta muy útil, sin embargo, no siempre es la manera más eficiente.
ÁRBOLES
Las estructuras de datos que han sido examinadas
hasta ahora son lineales. A cada elemento le
correspondía siempre un “siguiente” elemento.

La linealidad es típica de cadenas, de elementos de


arrays o listas, de campos en registros, entradas en
pilas o colas y nodos en listas enlazadas.

INTRODUCCIÓN
Ahora se examinarán las estructuras de datos no
lineales. En estas estructuras cada elemento puede
tener diferentes “siguientes” elementos, que
introduce el concepto de estructuras de bifurcación.
Las estructuras de datos no lineales son árboles y
grafos. A estas estructuras se les denomina también
estructuras multienlazadas.
INTRODUCCIÓN

El árbol es una estructura de datos muy importante en informática y en ciencias de la computación. Los árboles son
estructuras no lineales, al contrario que los arrays y las listas enlazadas, que constituyen estructuras lineales.

Los árboles se utilizan para:


para organizar objetos en orden de tal forma en aplicaciones diversas tales como inteligencia
representar fórmulas algebraicas, que las búsquedas sean muy eficientes y artificial o algoritmos de cifrado.

Casi todos los sistemas operativos almacenan sus archivos en árboles o estructuras similares a árboles. Además de las
aplicaciones citadas, los árboles se utilizan en diseño de compiladores, procesado de texto y algoritmos de búsqueda.
Á R BO LES
GE N E R A LE S Y
T E R M I N O LO GÍ A

• Intuitivamente, el concepto
de árbol implica una estructura
en la que los datos se
organizan de modo que los
elementos de información
están relacionados entre sí a
través de ramas. El árbol
genealógico es el ejemplo
típico más representativo del
concepto de árbol general.
DEFINICIONES
ÁRBOL

• Un árbol consta de un
conjunto finito de elementos,
denominados nodos y de un
conjunto finito de líneas
dirigidas, denominadas ramas,
que conectan los nodos.

• El número de ramas
asociado con un nodo es el
grado del nodo.
TERMINOLOGÍA
TERMINOLOGÍA

• Además del nodo raíz, existen muchos


términos utilizados en la descripción de los
atributos de un árbol. En la Figura, el nodo A
es el raíz.
• Utilizando el concepto de árboles
genealógicos, un nodo puede ser considerado
como padre si tiene nodos sucesores. Estos
nodos sucesores se llaman hijos.
• Por ejemplo, el nodo B es el padre de los
hijos E y F.
• El padre de H es el nodo D. Un árbol puede
representar diversas generaciones en la
familia.
TERMINOLOGÍA

• Los hijos de un nodo y los hijos de estos


hijos se llaman descendientes, y el padre
y los abuelos de un nodo son sus
ascendientes.
• Por ejemplo, los nodos E, F, I y J son
descendientes de B. Cada nodo no raíz
tiene un único padre y cada padre tiene
cero o más nodos hijos.
• Dos o más nodos con el mismo padre se
llaman hermanos. Un nodo sin hijos, tal
como E, I, J, G y H se llama nodo hoja.
El nivel de un nodo es su distancia al nodo raíz.

La raíz tiene una distancia cero de sí misma, por ello se


dice que está en el nivel 0.

NIVELES Los hijos del nodo raíz están en el nivel 1, sus hijos están
en el nivel 2, y así sucesivamente.

Una cosa importante que se aprecia entre los niveles de


nodos es la relación entre niveles y hermanos.

Los hermanos están siempre al mismo nivel, pero no


todos los nodos de un mismo nivel son necesariamente
hermanos.
ALTURA Y
PROFUNDIDAD

• Un camino es una secuencia de nodos


en los que cada nodo es adyacente al
siguiente. Cada nodo del árbol puede ser
alcanzado (se llega a él) siguiendo un único
camino que comienza en el nodo raíz.
• En la Figura, el camino desde el raíz a la
hoja I, se representa por AFI. Incluye dos
ramas distintas AF y FI.
• La altura o profundidad de un árbol
es el nivel de la hoja del camino más largo
desde la raíz más uno. Por definición1, la
altura de un árbol vacío es 0. La Figura
contiene nodos en tres niveles: 0, 1 y 2. Su
altura es 3.
NIVELES
SUBÁRBOLES

• Un árbol se divide en subárboles. Un subárbol es cualquier estructura


conectada por debajo del nodo raíz.
• Cada nodo de un árbol es la raíz de un subárbol que se define por el nodo y
todos sus descendientes.
• El primer nodo de un subárbol se conoce como el nodo raíz del subárbol y
se utiliza para nombrar el subárbol. Además, los subárboles se pueden
subdividir en subárboles.
• En la Figura, BCD es un subárbol al igual que E y FGHI. Obsérvese que,
por esta definición, un nodo simple es un subárbol.
• Por consiguiente, el subárbol B se puede dividir en subárboles C y D
mientras que el subárbol F contiene los subárboles G, H e I. Se dice que G,
H, I, C y D son subárboles sin descendientes.
RESUMEN DE DEFINICIONES
• El primer nodo de un árbol, normalmente dibujado en la posición
superior, se denomina raíz del árbol.

• Las flechas que conectan un nodo con otro se llaman arcos o


ramas.

• Los nodos terminales, esto es, nodos de los cuales no se deduce


ningún nodo, se denominan hojas.

• Los nodos que no son hojas se denominan nodos internos.


DEFINICIONES
• En un árbol donde una rama va de un nodo n1 a n2, se dice que n1
es padre de n2 y n2 es hijo de n1.

• n1 se llama ascendiente de n2 si n1 es el padre de n2 o si n1 es el


padre de un ascendiente n2.

• n2 se llama descendiente de n1 si n1 es un ascendiente de n2.


• Un camino de n1 a n2 es una secuencia de arcos contiguos que van de
n1 a n2.
• La longitud de un camino es el número de arcos que contiene o, de
forma equivalente, el número de nodos del camino menos uno.
• El nivel de un nodo es la longitud del camino que lo conecta al nodo
raíz.
• La profundidad o altura de un árbol es la longitud del camino más
largo que conecta la raíz a una hoja.
DEFINICIONES • Un subárbol de un árbol es un subconjunto de nodos del árbol,
conectados por ramas del propio árbol, esto es, a su vez un árbol.
• Sea S un subárbol de un árbol A: si para cada nodo n de SA, SA
contiene también todos los descendientes de n en A, SA se llama un
subárbol completo de A.
• Un árbol está equilibrado cuando, dado un número máximo k de
hijos de cada nodo y la altura del árbol h, cada nodo de nivel k < h-1
tiene exactamente k hijos. El árbol está equilibrado perfectamente, si
cada nodo de nivel l<h tiene exactamente k hijos.
ÁRBOLES EQUILIBRADOS
REPRESENTACIÓN GRÁFICA
• Las formas más frecuentes de representar en papel un árbol son
como árbol invertido y como una lista.
• Es el diagrama o carta de organización utilizado hasta ahora en las
diferentes figuras.
• El nodo raíz se encuentra en la parte más alta de una jerarquía, de la
que descienden ramas que van a parar a los nodos hijos, y así
sucesivamente.
REPRESENTACIÓN
• La figura presenta esta representación para una descomposición de
COMO ÁRBOL una computadora.
INVERTIDO
REPRESENTACIÓN DE
LISTA

• Otro formato utilizado para representar un


árboles es la lista entre paréntesis. Esta es la
notación utilizada con expresiones algebraicas.
• En esta representación, cada paréntesis abierto
indica el comienzo de un nuevo nivel y cada
paréntesis cerrado completa un nivel y se mueve
hacia arriba un nivel en el árbol.
• La notación en paréntesis correspondiente al
árbol la solución es: A (B (E (K, L), F), C (G), D
(H (M), I, J)).
ÁRBOLES BINARIOS
ÁRBOLES BINARIOS

Un árbol binario es un árbol


cuyos nodos no pueden tener
más de dos subárboles.

En un árbol binario, cada nodo


puede tener cero, uno o dos
hijos (subárboles).

Se conoce el nodo de la
izquierda como hijo izquierdo y
el nodo de la derecha como
hijo derecho.
ÁRBOLES BINARIOS

• Un árbol binario es una estructura recursiva.


• Un árbol binario es un conjunto finito de cero o más
nodos, tales que:
• Existe un nodo denominado raíz del árbol.
• Cada nodo puede tener 0, 1 o 2 subárboles,
conocidos como subárbol izquierdo y subárbol
derecho.
• Cada nodo es la raíz de su propio subárbol y tiene hijos,
que son raíces de árboles, llamados subárboles derecho
e izquierdo del nodo, respectivamente.
• Un árbol binario se divide en tres subconjuntos:
La distancia de un nodo a la raíz determina la eficiencia con la que
puede ser localizado.
Por ejemplo, dado cualquier nodo de un árbol, a sus hijos se puede
acceder siguiendo sólo un camino de bifurcación o de ramas, el que
conduce al nodo deseado.
De modo similar, a los nodos en el nivel 2 de un árbol sólo puede
accederse siguiendo dos ramas del árbol.

La característica anterior nos conduce a una característica muy


importante de un árbol binario, su balance o equilibrio.
EQUILIBRIO Para determinar si un árbol está equilibrado, se calcula su factor de
equilibrio.
El factor de equilibrio de un árbol binario es la diferencia en altura
entre los subárboles derecho e izquierdo.

Un árbol está perfectamente equilibrado si su equilibrio o balance es


cero y sus subárboles son también perfectamente equilibrados.
Dado que esta definición ocurre raramente se aplica una definición
alternativa: un árbol binario está equilibrado si la altura de sus
subárboles difiere en no más de uno y sus subárboles son también
equilibrados.
Á R BO LES BINA R IO S

• Dos árboles binarios se dice que


son similares si tienen la misma
estructura, y son equivalentes si
son similares y contienen la
misma información.
• Un árbol binario está equilibrado
si las alturas de los dos
subárboles de cada nodo del
árbol se diferencian en una
unidad como máximo.
ALTURAS
EQUILIBRIO
ÁRBOLES BINARIOS

Dado que los árboles binarios es la


estructura fundamental en la teoría
de árboles, será preciso disponer de
algún mecanismo que permita la
conversión de un árbol general en un
árbol binario.
CONVERSIÓN

Afortunadamente existe una técnica para convertir un árbol general a formato de árbol binario. Supongamos que se
tiene el árbol A y se quiere convertir en un árbol binario B. El algoritmo de conversión tiene tres pasos fáciles:
1. La raíz de B es la raíz de A.
2. Pasos 2
a) Enlazar al nodo raíz con el camino que conecta el nodo más a la izquierda (su hijo).
b) Enlazar este nodo con los restantes descendientes del nodo raíz en un camino, con lo que se forma el
nivel 1.
c) A continuación, repetir los pasos a) y b) con los nodos del nivel 2, enlazando siempre en un mismo ca-
mino todos los hermanos —descendientes del mismo nodo—. Repetir estos pasos hasta llegar al nivel
más alto.
3. Girar el diagrama resultante 45° para diferenciar entre los subárboles izquierdo y derecho.
REPRESENTACIÓN DE LOS ÁRBOLES
BINARIOS

Mediante punteros (lenguajes C y C++).

Mediante arrays o listas enlazadas.

Vinculando nodos, objetos con mienbros que referencian otros objetos del
mismo tipo.
RECORRIDO
• El recorrido de un árbol binario requiere que cada
nodo del árbol sea procesado (visitado) una vez, y
sólo una, en una secuencia predeterminada. Existen
dos enfoques generales para la secuencia de
recorrido, profundidad y anchura.
• En el recorrido en profundidad, el proceso exige un
camino desde la raíz a través de un hijo, al
descendiente más lejano del primer hijo antes de
proseguir a un segundo hijo. En otras palabras, en el
RECORRIDO recorrido en profundidad, todos los descendientes de
un hijo se procesan antes del siguiente hijo.
• En el recorrido en anchura, el proceso se realiza
horizontalmente desde el raíz a todos sus hijos; a
continuación, a los hijos de sus hijos y así
sucesivamente hasta que todos los nodos han sido
procesados. En el recorrido en anchura, cada nivel se
procesa totalmente antes de que comience el
siguiente nivel.
Es el proceso que permite acceder una sola vez a cada
uno de los nodos del árbol. Cuando un árbol se recorre,
el conjunto completo de nodos se examina.
Los algoritmos de recorrido de un árbol binario
presentan tres tipos de actividades comunes:

RECORRIDO • Visitar el nodo raíz.


• Recorrer el subárbol izquierdo.

DE UN ÁRBOL • Recorrer el subárbol derecho.

BINARIO Estas tres acciones repartidas en diferentes órdenes


proporcionan los diferentes recorridos del árbol en
profundidad.
Los más frecuentes tienen siempre en común recorrer
primero el subárbol izquierdo y luego el subárbol
derecho. Los algoritmos que lo realizan llaman pre-orden,
post-orden, in-orden y su nombre refleja el momento en
que se visita el nodo raíz.
RECORRIDO
Recorrido pre-orden

• Visitar el raíz.
• Recorrer el subárbol izquierdo en pre-orden.
• Recorrer el subárbol derecho en pre-orden.

Recorrido in-orden

RECORRIDOS • Recorrer el subárbol izquierdo en in-orden.


• Visitar el raíz.
• Recorrer el subárbol derecho en in-orden.

Recorrido post-orden

• Recorrer el subárbol izquierdo en post-orden.


• Recorrer el subárbol derecho en post-orden.
• Visitar el raíz.
RECORRIDO
ÁRBOLES DE BÚSQUEDA
• Se crea un árbol binario de búsqueda con los valores
CREACIÓN 8, 3, 1, 20, 10, 5, 4.
DE UN • Para todo nodo del árbol, los datos a su izquierda
ÁRBOL deben ser menores que el dato del nodo actual,
mientras que todos los datos a la derecha deben ser
BINARIO DE mayores que el del nodo actual.
BÚSQUEDA
ÁRBOLES DE
EXPRESIÓN
ÁRBOLES DE
EXPRESIÓN

• Una aplicación muy importante de los


árboles binarios son los árboles de
expresiones.
• Una expresión es una secuencia de tokens
(componentes de léxicos que siguen unas
reglas establecidas).
• Un token puede ser un operando o bien un
operador.
ÁRBOLES DE EXPRESIÓN

Un árbol de expresión es un árbol binario con las siguientes


propiedades:

1. Cada hoja es un operando.

2. Los nodos raíz y los nodos internos son operadores.

3. Los subárboles son subexpresiones cuyo nodo raíz es un


operador.
1. La prioridad se determina sólo por paréntesis.
2. La expresión completa se sitúa entre paréntesis.
A fin de ver la prioridad en las expresiones, considérese
la expresión
a * c + e / g - (b + d)
REGLAS PARA LA
CONSTRUCCIÓN DE Los operadores con prioridad más alta son * y /, es
ÁRBOLES decir: (a * c) + (e / g) - (b + d)
DE EXPRESIONES
Los operadores que siguen en orden de prioridad son +
y -, que se evalúan de izquierda a derecha. Por
consiguiente, se puede escribir: ((a * c) + (e / g)) - (b +
d)
Por último, la expresión completa entre paréntesis será:
(((a * c) + (e / g)) - (b + d))
• 1. La primera vez que se encuentre un paréntesis a
izquierda, crear un nodo que será el nodo raíz. Se
llama a éste nodo actual y se sitúa en una pila.
• 2. Cada vez que se encuentre un nuevo paréntesis a
izquierda, crear un nuevo nodo. Si el nodo actual no
tiene un hijo izquierdo, hacer el nuevo nodo el hijo
izquierdo; en caso contrario, hacerlo el hijo derecho.
Hacer el nuevo nodo el nodo actual y ponerlo en la
pila.
ALGORITMO • 3. Cuando se encuentre un operando, crear un nuevo
nodo y asignar el operando a su campo de datos. Si el
nodo actual no tiene un hijo izquierdo, hacer el nuevo
nodo el hijo izquierdo; en caso contrario, hacerlo el
hijo derecho.
• 4. Cuando se encuentre un operador, sacar el nodo
cabeza de la pila y situar el operador en el campo
dato del nodo.
• 5. Ignorar el paréntesis derecho y los blancos.
ÁRBOLES DE
EXPRESIÓN

También podría gustarte