07 Análisis de algoritmos recursivos - · PDF file• Teorema maestro • Ejemplo 01 ... recurrente para calcular la complejidad del algoritmo. ... combinaciones de funciones exponenciales

Embed Size (px)

Citation preview

  • Tema 06: Anlisis de algoritmos recursivos

    1

    Anlisis de algoritmos

    M. en C. Edgardo Adrin Franco Martnez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

    http://www.eafranco.com/mailto:[email protected]

  • 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