07 análisis de algoritmos recursivos - · pdf file• teorema maestro • ejemplo...
Post on 09-Feb-2018
230 Views
Preview:
TRANSCRIPT
Tema 06: Anlisis de algoritmos recursivos
1
Anlisis de algoritmos
M. en C. Edgardo Adrin Franco Martnez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom
http://www.eafranco.com/mailto:edfrancom@ipn.mx
Recursividad Ecuaciones en recurrencia
Ejemplo 01: Factorial recursivo Ejemplo 02: Fibonacci recursivo Ejemplo 03: Torres de Hani recursivo Ejemplo 04: Bsqueda binaria recursiva
Recurrencias homogneas Ejemplo
Recurrencias no homogneas Ejemplo
Recurrencias no lineales Teorema maestro
Ejemplo 01 Ejemplo 02
Contenido
2
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
Recursividad La recursividad es un
concepto fundamental en matemticas y en computacin. Es una alternativa diferente para implementar estructuras de repeticin (iteracin).
Se puede usar en toda situacin en la cual la solucin pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas.
3
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
La recursividad es un recurso muy poderoso que permite expresar soluciones simples y naturales a ciertos tipos de problemas. Es importante considerar que no todos los problemas son naturalmente recursivos.
Un objeto recursivo es aquel que aparece en la definicin de si mismo, as como el que se llama a s mismo.
4
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
La recursividad es un fenmeno que se presenta en muchos problemas de forma natural, delegando la solucin de un problema en la solucin de otro ms pequeo.
El anlisis temporal de un algoritmo recursivo vendr en funcin del tiempo requerido por la(s) llamada(s) recursiva(s) que aparezcan en l.
El anlisis temporal de un algoritmo iterativo es simple con base en la operacin bsica de este, para los algoritmos recursivos nos vamos a encontrar con una dificultad aadida, pues la funcin que establece su tiempo de ejecucin viene dada por una ecuacin en recurrencia, es decir, () = (), en donde en la expresin aparece la propia funcin .
5
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
Cuando se quiere calcular la demanda de recursos de un algoritmo definido recursivamente, la funcin complejidad que resulta no est definida slo en trminos del tamao del problema y algunas constantes, sino en trminos de la funcin complejidad misma.
Adems no es una sola ecuacin, dado que existen otras (al menos una) que determinan la cantidad de recursos para los casos base de los algoritmos recursivos. Dada esta situacin, para poder obtener el comportamiento del algoritmo, es necesario resolver el sistema recurrente obtenido.
Ecuaciones en recurrencia
6
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
Considerando el producto de num*Factorial(num-1)como operacin bsica, y el costo del caso base como 1 ( = ), podemos construir la ecuacin recurrente para calcular la complejidad del algoritmo como sigue:
= 1 + ( 1) 0 = 1
Ejemplo 01: Factorial recursivo
7
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
int Factorial( int num ) { if ( num == 0 ) return 1; else return num * Factorial( num - 1 ); }
Costo de la multiplicacin
Costo de la llamada a Factorial (n-1)
Costo del caso base
Considerando la suma Fibonacci(num-1) + Fibonacci (num-2) como operacin bsica, y el costo 1 de los 2 casos base podemos construir la ecuacin recurrente para calcular la complejidad del algoritmo.
= 1 + 1 + 2 0 = 1 1 = 1
Ejemplo 02: Fibonacci recursivo
8
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
int Fibonacci(int num) { if (num ==0) return 0; else if (num == 1) return 1; else return Fibonacci(num-1) + Fibonacci (num-2); }
Costo de la llamada a Fibonacci(n-1)
Costo de la llamada a Fibonacci(n-2) Costo de la suma
Costo de n=0 y n=1
Considerando la operacin Mover_de(Src,Dst)como operacin bsica, y tomado un coste de 0 cuando N=0, podemos construir la ecuacin recurrente para calcular la complejidad del algoritmo.
= 1 + 1 + 1 0 = 0
Ejemplo 03: Torres de Hani recursivo
9
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
Hanoi(N, Src, Aux, Dst) { if(n>0) { Hanoi(N - 1, Src, Dst, Aux); Mover_de(Src,Dst); Hanoi(N - 1, Aux, Src, Dst); } return; }
Considerando la operacin como operacin bsica las comparaciones, y tomado un coste de 0 cuando Tam(numeros[])=0, podemos construir la ecuacin recurrente para calcular la complejidad del algoritmo.
= 3 + /2 0 = 0
Ejemplo 04: Bsqueda binaria recursiva
10
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
int BusquedaBinaria(int num_buscado, int numeros[], int inicio, int centro, int final) { if (inicio>final) return -1; else if (num_buscado == numeros[centro]) return centro; else if (num_buscado < numeros[centro]) return BusquedaBinaria(num_buscado,numeros,inicio,(int)((inicio+centro-1)/2),centro-1); else return BusquedaBinaria(num_buscado,numeros,centro+1,(int)((final+centro+1)/2),final); }
Sea A un arreglo de n elementos y p, r ndices del rango a ordenar.
= 2 /2 + 1 = 1
Ejemplo 05: Merge-sort
11
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
Merge-Sort(a, p, r) {
if ( p < r ) { q = parteEntera((p+r)/2); Merge-Sort(a, p, q); Merge-Sort(a, q+1,r); Merge(a, p, q, r); }
}
Son de la forma: 0() + 1( 1) + 2( 2) + + ( ) = 0
Donde los coeficientes son nmeros reales, y es un
nmero natural entre 1 y .
Para eliminar la recurrencia se buscan trminos que sean combinaciones de funciones exponenciales de la forma:
= 11 1 + 22 2++ = 1 =1
Donde los valores 1, 2, , y 1, 2, , son nmeros
reales, y 1(), ,() son polinomios en con coeficientes reales.
Recurrencias homogneas
12
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
0() + 1( 1) + 2( 2) + + ( ) = 0
Para resolverlas haremos el cambio = (), con lo cual obtenemos la ecuacin caracterstica asociada:
0 + 11 + 22 + + = 0
Llamemos 1, 2, , a sus races, ya sean reales o complejas. Dependiendo del orden de multiplicidad de tales races, pueden darse los siguientes casos: Caso 1: Races distintas Caso 2: Races con multiplicidad mayor que 1
13
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
Caso 1: Races distintas Si todas las races de la ecuacin caracterstica son
distintas, esto es, si , entonces la solucin de la ecuacin en recurrencia viene dada por la expresin:
= 11 + 22++ = =1
Donde los coeficientes se determinan a partir de las condiciones iniciales.
14
Anl
isis d
e al
gorit
mos
06
An
lisis
de a
lgor
itmos
recu
rsiv
os
Prof
. Edg
ardo
Adr
in
Fran
co M
artn
ez
Caso 2: Races con multiplicidad mayor que 1 Supongamos que alguna de las races (p.e. 1) tie
top related