Title: Curso de Programaci
1Curso de Programación Estructurada
Maestría en Robótica y Manufactura Avanzada
Dra. L. Abril Torres Méndez
Saltillo
- Clase 3 Análisis y diseño de algoritmos
Periodo Sept.-Dic, 2010.
2Relaciones Recurrentes
- Una función recursiva contiene lo siguiente
- 1. Caso base la condición inicial o base la
cual define el primer (o los primeros pocos)
elementos de una secuencia. - 2. Caso Inductivo (Recursivo) un paso
inductivo en el cual los términos siguientes en
la secuencia son definidos en función de los
términos iniciales.
Una relación recurrente para una secuencia a1,
a2, a3, ... es una fórmula que relaciona cada
término ak con sus predecesores ak-1, ak-2, ...,
a k-i, donde i es un entero fijo y k es cualquier
entero mayor o igual que i. Las condiciones
iniciales para tal relación recurrente
especificarán los valores de a1, a2, a3, ...,
ai-1.
3 Una función recurrente es por ejemplo 1) s0
1 s1 2 2) s k sk-1
sk-2 Si deseamos calcular la recurrencia para
s10, obtenemos que es igual a144
4Ejemplo 1
Si enumeramos los primeros valores de esta
secuencia tenemos K2 K1 1 0 1 1 K3
K2 2 1 2 3 K4 K3 3 3 3 6 K5
K4 4 6 4 10 Para una relación de
recurrencia, podemos ver que la secuencia está
dada por la fórmula (para toda n gt 1)
Kn 0 1 2 ... (n 1)
n(n 1)/2
5Ejemplo 2 Torres de Hanoi
El objetivo de las Torres de Hanoi es
mover todos los discos de la primera estaca a la
tercera, siguiendo estas reglas 1. Solamente
un disco puede ser movido a la vez
(específicamente, el disco más arriba de
cualquier estaca). 2. En ningún momento, un
disco más grande puede ser colocado sobre uno más
pequeño.
6Cuántos movimientos/discos?
Ir a la página para visualizar el juego de las
Torres de Hanoi http//www.psicoactiva.com/juegos
/hanoi/jg_hanoi.htm
7Análisis
Número de discos vs. Número de
movimientos Secuencia 1, 3, 7, 15, 31, 63,
Razonamiento Para mover n-1 discos en la
estaca central o auxiliar se requieren Hn-1
movimientos. Luego se mueve el disco n en la
estaca 3 y hay que vaciar el resto de igual forma
con Hn-1 movimientos. Esto nos da la siguiente
relación recurrente
Hn 2Hn-1 1 El caso base para esta
relación es H 0 0, dado que si no hay discos no
hay movimientos!
8Análisis
Para obtener una fórmula general (cerrada) para
Hn (no hay Hn en el lado derecho de la ecuación),
se realiza una sustitición repetida, como
sigue Hn 2Hn-1 1 2(2Hn-2 1) 1
22 Hn-2 2 1 22 (2Hn-3 1) 2 1
23 Hn-3 22 2 1 El patrón para esta
relación de recurrencia es Hn (2i Hn-i)
2i-1 2i-2 ... 22 21 20 Podemos
asignar n i (esto requiere de una prueba del
tipo inductiva) Hn (2n H0) 2n-1 2n-2
... 22 21 1 Sustituyendo H0 0, se
obtiene la fórmula
Hn 2n-1 2n-2 ... 22 21 1
Tarea (no entregar) Estudiar cómo se realiza una
prueba por inducción.
9Ejercicios
Encontrar la fórmula general (cerrada) para las
siguientes relaciones recurrentes. (omitir la
prueba de inducción). a) Relación
recurrente a0 2
an 3an-1 b)
Relación recurrente a0 1
an 2an-1
1
10Porqué nos interesa encontrar la relación de
recurrencia?
Una relación de recurrencia expresa el tiempo de
ejecución de un algoritmo recursivo. Esto incluye
cuántas llamadas recursivas son generadas en cada
nivel de recursividad, qué tanto del problema es
resuelto por cada llamada recursiva, y qué tanto
trabajo se realiza en cada nivel.
11Algoritmo Calcular factorial de n
int factorial(int n) if (n lt 1)
return(1) else return(n
factorial(n-1)) Relación recurrente Caso
base T(1) a Inducción T(n) b T(n-1), for
n gt 1 Fórmula general T(1) a T(2) b T(1)
b a T(3) b T(2) b (b a) a
2b T(4) b T(3) b (a 2b) a 3b T(n)
a (n-1)b for all n gt 1
12Fórmula cerrada del factorial de n?
Se puede calcular sólo una aproximación del
valor de n! con la siguiente fórmula
13Tarea 2
- Probar la función recurrente anterior para el
algoritmo de cálculo de factorial. - Leer sobre los algoritmos de ordenamiento
14Buen fin de semana