Recursividad, Arboles y Grafos Estructura de Datos

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

Recursividad

Unidad III

3.1 Definicin
Un mtodo es recursivo cuando directa o indirectamente se llama a si mismo. Un
mtodo presenta recursividad directa cuando se llama a si mismo dentro de su
definicin. La recursividad indirecta consiste en que un mtodo llame a otro que a
su vez contenga una referencia directa o indirecta al primero.
Al trabajar con recursividad se deben tener en cuenta los siguientes puntos:
1 Caso base: es una instancia que se puede resolver sin recursin. Cualquier
llamada recursiva debe progresar hacia un caso base.
2 Progreso: cualquier llamada recursiva debe progresar hacia un caso base.
3 Puede creerlo: suponga siempre que las llamadas recursivas funcionan
correctamente.
4 Regla de inters compuesto: nunca duplique trabajo resolviendo la misma
instancia de un problema en llamadas recursivas separadas.
En el diseo de un algoritmo recursivo es preciso tener en cuenta que:

La recursividad puede ser directa o indirecta.

El instrumento necesario para expresar los algoritmos recursivamente es el


mtodo.
Un mtodo presenta recursividad directa cuando el mtodo se llama a s
mismo dentro de su definicin.
La recursividad indirecta consiste en que un mtodo llame a otro que, a su
vez contenga una referencia directa o indirecta al primero.
Un mtodo recursivo debe disponer de una o varias instrucciones selectivas
donde establecer la condicin o condiciones de salida (caso base).
Cada vez que se llame al mtodo los valores de los parmetros y variables
locales sern almacenados en una pila.
Durante la ejecucin de dicho mtodo los parmetros y variables tomaran
nuevos valores, con los que trabajar el mtodo.
Cuando termine de ejecutarse el mtodo, se retornar al valor anterior,
recuperndose de la pila los valores tanto de parmetros por valor como de
variables locales y continundose la ejecucin con la instruccin siguiente a
la llamada recursiva. Hay que tener en cuenta que la recuperacin de los
datos almacenados en una pila se efecta siempre en orden inverso a
como se introdujeron.

2.2 Procedimientos recursivos


Para ilustrar como funciona la recursividad se utilizar el problema del factorial. El
factorial de 1 es 1, el factorial de 2 es 2 * 1, el de 3 es 3 * 2 * . As el factorial de 4 es 4 * 3
* 2 * 1. El proceso puede extenderse de forma indefinida. Si se observa con atencin el
proceso del calculo de un factorial, encontramos que el factorial de 4 es en realidad 4 por
el factorial de 3 (3 * 2 * 1). Igual el factorial de 3 es en realidad 3 por el factorial de2 (2 *
1). El factorial de 2 es 2 por el factorial de 1 (1). La siguiente tabla muestra el proceso de
calculo de los factoriales.

Valor
1
2
3
4
5

Tabla 3.2.- Proceso de calculo de los factoriales.


Calculo
Resultado
Factorial
1
1
1
2*1
2
2 * factorial(1)
3*2*1
6
3 * factorial(2)
4*3*2*1
24
4 * factorial(3)
5*4*3*2*
120
5 * factorial(4)
1

Para crear un mtodo que calcule factoriales en forma recursiva, debe hacer que
se llame a s mismo, como se muestra a continuacin:

public static int factorial(int valor)


{
if (valor == 1)
return(1);
else
return(valor * factorial(valor 1));
}

Estructuras no lineales

Unidad III

3.1 Arboles.
En ciencias de la informtica, un rbol es una estructura de datos ampliamente
usada que imita la forma de un rbol (un conjunto de nodos conectados). Un nodo
es la unidad sobre la que se construye el rbol y puede tener cero o ms nodos
hijos conectados a l. Se dice que un nodo es padre de un nodo si existe un
enlace desde
hasta (en ese caso, tambin decimos que es hijo de ). Slo
puede haber un nico nodo sin padres, que llamaremos raz. Un nodo que no
tiene hijos se conoce como hoja. Los dems nodos (tienen padre y uno o varios
hijos) se les conoce como rama.
3.1.1 Concepto de rbol.

3.1.2 Clasificacin de rboles.


Los rboles se clasifican de la siguiente manera:
rboles binarios.
o
Distintos
o
Similares
o
Equivalentes
o
Equilibrado
o
Completo

o
o
o
o
o

rboles Multicaminos.
B
B+
B*
R
2-4

Un rbol binario es una estructura de datos homognea, dinmica y no lineal en


donde a cada nodo le pueden seguir como mximo dos nodos hijos (que pueden
estar vacos), y cada hijo se designa ya sea como hijo izquierdo o como hijo
derecho.

Un rbol binario es distinto cuando su estructura es diferente a la de otros rboles


binarios.

Un rbol binario es similar cuando su estructura es idntica a la de otros rboles


binarios, pero la informacin que guardan los nodos es diferente entre s.

Un rbol binario es equivalente cuando su estructura e informacin de sus nodos


es idntica a la de otros rboles binarios.

Un rbol binario es equilibrado es aquel que todos sus nodos cumplen con la
propiedad:
altura (subrbol izquierdo) altura (subrbol derecho) <= 1

Ejemplo. Si usamos los rboles anteriores para determinar si son o no


equilibrados.

El primero tiene una altura izquierda de 2 y derecha 1, 2-1 <= 1, la condicin es


verdadera, por lo tanto es un rbol equilibrado.
El segundo tiene una altura izquierda de 2 y derecha 0, 2-0 <= 1, la condicin es
falsa, por lo tanto es un rbol no equilibrado.
Un rbol binario es completo cuando todos sus nodos excepto los del ltimo nivel,
tienen dos hijos y todas las hojas estn en el mismo nivel. Para calcular el nmero
de nodos de un rbol completo se aplica la formula:
Nmero de nodos = 2altura - 1

Ejemplo. La altura de este rbol anterior es 3, aplicando la frmula del nmero de


nodos seria.
Nmero de nodos = 23 1 = 8 1 = 7
Un rbol multicamino es una estructura de datos homognea, dinmica y no
lineal, en donde a cada nodo le pueden seguir una cantidad n de nodos hijos, y
cada hijo se designa por el nmero de hijo que le corresponde.

3.1.3 Operaciones bsicas sobre rboles binarios.


Las operaciones que se pueden aplicar a un rbol binario son las siguientes:
-

Creacin de un rbol

Insercin de un nodo nuevo.

Eliminacin de un nodo.

Recorrido del rbol.

Balanceo del rbol.

3.1.4 Aplicaciones.
Los rboles tienen aplicaciones en diferentes mbitos como por ejemplo: Diseo
de compiladores, sistemas expertos, sistemas evolutivos, sistemas conscientes,
manejo de directorios por ejemplo Mi PC dentro de Windows. Representacin de
un rbol genealgico. ndices de bases de datos y mucha ms
Sin lugar tiene muchas aplicaciones, aunque su implementacin no es tan usada
como las base de datos tradicionales, pero actualmente existen modelos mediante
los cuales un rbol puede ser representado en una lista dinmica simplemente o
doblemente ligada, este modelo se presentar posteriormente.
3.1.5 Arboles balanceados (AVL).
Un rbol binario se encuentra balanceado si la diferencia en la altura de los dos
subrboles de cualquier nodo en el rbol es cero o uno.

El rbol izquierdo se encuentra balanceado ya que la diferencia en la altura entre


sus dos subrboles (izquierdo y derecho) es 1. En cambo el rbol de la derecha no
se encuentra balanceado ya que la diferencia en la altura entre sus dos
subrboles es 2.
Existen varias tcnicas para balancear de manera adecuada un rbol binario,
dichas tcnicas se pueden clasificar en dos grupos:
Las que balancean en el momento que un nuevo nodo ingresa en el
rbol y
Las que utilizan el mismo rbol o una estructura adicional para
balancear el rbol.

Las primeras tcnicas reestructuran constantemente el rbol, cuando los


elementos llegan y producen un rbol desbalanceado, lo cual requiere un pequeo
retraso en la insercin de un nuevo nodo.

El segundo grupo de tcnicas, realiza el balanceo en dos procesos, el primero,


ordena los datos del rbol en forma ascendente (menor a mayor), ya sea en el
mismo rbol o en otra estructura adicional (pila, cola o lista) y el segundo,
construye un nuevo rbol con los datos ordenados, lo que garantiza que el rbol
resultante se balancea.
Utilizando el segundo grupo de tcnicas y en particular la que utiliza una estructura
adicional (lista) para almacenar los elementos del rbol de forma ordenada, el
balanceo de un rbol requiere de los siguientes procedimientos:

Para transformar un rbol en una lista ordenada aplicando recursividad:

El mtodo debe recibir como argumento (el nodo raz) en un nodo


temporal.

Si el nodo temporal es igual a nulo, el mtodo se termina con la


sentencia de retorno.

Aplicar la recursividad mandando como argumento el nodo que se


encuentra del lado izquierdo del nodo temporal.

Almacenar en la lista el elemento del nodo temporal.

Aplicar la recursividad mandando como argumento el nodo que se


encuentra del lado derecho del nodo temporal.

Para crear el nuevo rbol a partir de la lista ordenada:

El mtodo debe recibir como argumentos: la lista, la posicin inicial y


la posicin final de la lista;

Si la posicin inicial es menor o igual a la posicin final, se ejecutan


los siguientes pasos, si no el mtodo termina.

Encontrar la mitad de la lista sumando la posicin inicial y la final


dividindola entre dos.

Agregar al nuevo rbol el elemento que se encuentra en la nueva


posicin generada (la mitad).

Aplicar la recursividad mandando como argumentos la lista, la


posicin inicial de la lista y la mitad menos una posicin.

Aplicar la recursividad mandando como argumentos la lista, la mitad


mas una posicin y la posicin final de la lista.

Funcionamiento del balanceo

1)

Se extraen todos los elementos del rbol a una lista de manera ordenada

10

15

17

20

35

2) Si la posicin inicial es menor o igual que la posicin final entonces se hacen


los siguientes pasos:
a. Se obtiene la posicin inicial, la final, se suman y se dividen
entre 2. (0+7)/2=3
b. Asignar al rbol el elemento que se encontr en la mitad(3)
c. Mandar de manera recursiva la mitad izquierda al mismo mtodo
enviando la lista y la posicin inicial y la posicin final
i. Lista,0,mitad-1= Lista,0,2
d. Mandar de manera recursiva la mitad de la derecha al mismo
mtodo enviando la lista y la posicin inicial y la final.
i. Lista,mitad+1,final= Lista,4,7
e. Regresar al paso 2.
Ejecucin llamado por llamado

No.
Paso

Llamado

ndices

Insertar

Llamados
pendiente)

(Lista,0,Lista.size()1)

(0+7)/2=3

10
(raz)

(Lista,4,Lista.size()-1)

(Lista,0,2)

(0+2)/2=1

(Lista,2,2)

(Lista,0,0)

(0+0)/2=0

Ya no se
condicin

cumple

la

(Lista,2,2)

(2+2)/2=2

Ya no se
condicin

cumple

la

(Lista,4,Lista.size()1)

(4+7)/2=5

17

(Lista,6,7)

(Lista,4,4)

(4+4)/2=4

15

Ya

cumple

la

no

se

recursivos

condicin
7

(Lista,6,7)

(6+7)/2=6

20

(Lista,7,7)

(Lista,7,7)

(7+7)/2=7

35

Ya no se
condicin

4.2 Grafos.

cumple

la

4.2.1 Terminologa de grafos.


La terminologa que manejaremos regularmente para el uso de grafos es la
siguiente:

CAMINO.Es una secuencia de vrtices V1, V2, V3, ... , Vn, tal que cada uno
de estos V1-&gtV2, V2-&gtV3, V1-&gtV3.

LONGITUD DE CAMINO. Es el nmero de arcos en ese camino.

CAMINO SIMPLE. Es cuando todos sus vrtices, excepto tal vez el primero
y el ltimo son distintos.

CICLO SIMPLE. Es un camino simple de longitud por lo menos de uno que


empieza y termina en el mismo vrtice.

ARISTAS PARALELAS. Es cuando hay ms de una arista con un vrtice


inicial y uno terminal dados.

GRAFO CICLICO. Se dice que un grafo es cclico cuando contiene por lo


menos un ciclo.

GRAFO ACICLICO. Se dice que un grafo es aciclco cuando no contiene


ciclos.

GRAFO CONEXO. Un grafo G es conexo, si y solo si existe un camino


simple en cualesquiera dos nodos de G.

GRAFO COMPLETO FUERTEMENTE CONEXO.Un grafo dirigido G es


completo si para cada par de nodos (V,W) existe un camino de V a W y de
W a V (forzosamente tendrn que cumplirse ambas condiciones), es decir
que cada nodo G es adyacente a todos los dems nodos de G.

GRAFO UNILATERALMENTE CONEXO.Un grafo G es unilateralmente


conexo si para cada par de nodos (V,W) de G hay un camino de V a W o un
camino de W a V.

GRAFO PESADO ETIQUETADO. Un grafo es pesado cuando sus aristas


contienen datos (etiquetas). Una etiqueta puede ser un nombre, costo un
valor de cualquier tipo de dato. Tambin a este grafo se le denomina red de
actividades, y el nmero asociado al arco se le denomina factor de peso.

VERTICE ADYACENTE. Un nodo o vrtice V es adyacente al nodo W si


existe un arco de m a n.

GRADO DE SALIDA.El grado de salida de un nodo V de un grafo G, es el


nmero de arcos o aristas que empiezan en V.

GRADO DE ENTRADA.El grado de entrada de un nodo V de un grafo G,


es el nmero de aristas que terminan en V.

NODO FUENTE.Se le llama as a los nodos que tienen grado de salida


positivo y un grado de entrada nulo.

NODO SUMIDERO.Se le llama sumidero al nodo que tiene grado de salida


nulo y un grado de entrada positivo.

4.2.2 Operaciones bsicas sobre grafos.


En los grafos, como en todas las estructuras de datos, las dos operaciones
bsicas son insertar y borrar. En este caso, cada una de ellas se desdobla en dos,
para insertar/eliminar vrtices e insertar/eliminar aristas.
Insertar vrtice
La operacin de insercin de un nuevo vrtice es una operacin muy sencilla,
nicamente consiste en aadir una nueva entrada en la tabla de vrtices
(estructura de datos que almacena los vrtices) para el nuevo nodo. A partir de
ese momento el grafo tendr un vrtice ms, inicialmente aislado, ya que ningna
arista llegar a l.

Insertar arista
Esta operacin es tambin muy sencilla. Cuando se inserte una nueva arista en el
grafo, habr que aadir un nuevo nodo a la lista de adyacencia (lista que
almacena los nodos a los que un vrtice puede acceder mediante una arista) del
nodo origen, as si se aade la arista (A,C), se deber incluir en la lista de
adyacencia de A el vrtice C como nuevo destino.
Eliminar vrtice
Esta operacin es inversa a la insercin de vrtice. En este caso el procedimiento
a realizar es la eliminacin de la tabla de vrtices del vrtice en s. A continuacin
habr que eliminar las aristas que tuviesen al vrtice borrado como origen o
destino.
Eliminar arista
Mediante esta operacin se borra un arco del grafo. Para llevar a cabo esta accin
es necesario eliminar de la lista de adyacencia del nodo origen el nodo
correspondiente al nodo destino.
Otras operaciones
Las operaciones adicionales que puede incluir un grafo son muy variadas. Adems
de las clsicas de bsqueda de un elemento o recorrido del grafo, tambin
podemos encontrarnos con ejecucin de algoritmos que busquen caminos ms
cortos entre dos vrtices, o recorridos del grafo que ejecuten alguna operacin
sobre todos los vrtices visitados, por citar algunas operaciones de las ms
usuales.

También podría gustarte