Tema 2 Fundamentos de Complejidad Algorítmica · PDF fileFundamentos de Complejidad...

download Tema 2 Fundamentos de Complejidad Algorítmica · PDF fileFundamentos de Complejidad Algor´ıtmica Pablo Sanchez Dpto. Matematicas, Estad´ıstica y Computacio´n ... El conjunto

If you can't read please download the document

Transcript of Tema 2 Fundamentos de Complejidad Algorítmica · PDF fileFundamentos de Complejidad...

  • Tema 2

    Fundamentos de Complejidad Algortmica

    Pablo Sanchez

    Dpto. Matematicas, Estadstica y ComputacionUniversidad de Cantabria

    Santander (Cantabria, Espana)[email protected]

    Pablo Sanchez (MATESCO) Complejidad Algortmica 1 / 28

  • Bibliografa Basica

    Brasard, G. and Bratley, P. (2000).Fundamentos de Algoritmia.Prentice Hall.

    Ricardo Pena (2005).Diseno de Programas: Formalismo y Abstraccion.Pearson Educacion, 3 edition.

    Pablo Sanchez (MATESCO) Complejidad Algortmica 2 / 28

  • Objetivos

    Objetivos

    1 Conocer los conceptos y tecnicas basicas de calculo de complejidadalgortmica.

    2 Saber estimar la complejidad de algoritmos iterativos basicos.

    3 Conocer las tecnicas de estimacion de la complejidad de algoritmosrecursivos.

    4 Conocer los conceptos basicos de la complejidad computacional y lacomputabilidad.

    Pablo Sanchez (MATESCO) Complejidad Algortmica 3 / 28

  • Introduccion

    Objetivo de la Complejidad Algortmica

    Complejidad Algortmica

    Estudiar de forma generica (e independiente a la maquina) los recursos(tiempo y cantidad de memoria) requeridos por un algoritmo para resolverun problema.

    Problemas de las pruebas empricas:

    1 Hay que implementar el algoritmo.

    2 Hay que hacer muchas pruebas (y para casos largos).

    3 Probar algoritmos pesados puede ser muy costoso.

    Pablo Sanchez (MATESCO) Complejidad Algortmica 4 / 28

  • Introduccion

    Complejidad de un Algoritmo Simple

    // Busqueda de la posicion de un entero dentro de un

    // vector

    FUNCION posicion(n: ENTERO, v : vENTERO) : ENTERO ES

    i : ENTERO;

    i := 0;

    MIENTRAS ((i

  • Fundamentos de Complejidad Algortmica Introduccion

    Preguntas Importantes a Responder

    1 Como se comporta el algoritmo para problemas grandes?

    2 Existe algun lmite al tamano de los datos de entrada?

    3 Como de eficiente es un algoritmo en comparacion a otro algoritmo?

    4 Que tipo de funcion describe el tiempo consumido por un algoritmo?

    Pablo Sanchez (MATESCO) Complejidad Algortmica 6 / 28

  • Fundamentos de Complejidad Algortmica Introduccion

    Medidas de Tiempo de un Algoritmo

    Para un tamano de la entrada fijo, diversas variables sobre la formade la entrada pueden afectar al tiempo de ejecucion del algoritmo.

    Se analizan por tanto 3 casos:

    Caso peor: maximo tiempo de respuesta para un tamano de entradafijo.

    Caso mejor: mnimo tiempo de respuesta para un tamano de entradafijo.

    Caso promedio: tiempo medio de respuesta para un tamano deentrada fijo.

    Pablo Sanchez (MATESCO) Complejidad Algortmica 7 / 28

  • Fundamentos de Complejidad Algortmica Introduccion

    Principios de Complejidad Algortmica

    Principio de Invarianza

    Dado un algoritmo S , y dos implementaciones I1 e I2 de dicho algoritmo,cuyos tiempos de ejecucion son t1(n) y t2(n), entonces existen constantesnaturales k y n0, tales que n n0, t1(n) k t2

    Operacion elemental

    Una operacion elemental es aquella cuyo tiempo de ejecucion esta acotadosuperiormente por un valor constante que depende solo de la maquinadonde se ejecuta y es por tanto independiente de los parametros delproblema que resuelve un algoritmo.

    Pablo Sanchez (MATESCO) Complejidad Algortmica 8 / 28

  • Fundamentos de Complejidad Algortmica Notaciones Asintoticas

    Notaciones asintoticas

    Orden de una funcion O(f (n))

    Sea f : N R+ {0}. El conjunto de funciones del orden de f (n),denotado como O(f (n)), se define como:

    O(f (n)) = {g : N R+ 0|c R+, n0 N;n no ; g(n) c f (n)}

    Una funcion g(n) es del orden de f (n) cuando g(n) O(f (n)).

    Pablo Sanchez (MATESCO) Complejidad Algortmica 9 / 28

  • Fundamentos de Complejidad Algortmica Notaciones Asintoticas

    Notaciones asintoticas

    Cota inferior asintotica de una funcion f (n)

    Sea f : N R+ {0}. El conjunto de funciones que son cotas inferioresasintoticas de f (n), denotado (f (n)), se define como:

    (f (n)) = {g : N R+ 0|c R+, n0 N; n no ; g(n) c f (n)}

    Una funcion g(n) es cota inferior asintotica de f (n) cuando g(n) (f (n)).

    Orden exacto de una funcion f (n)

    Sea f : N R+ {0}. El conjunto de funciones del orden exacto de f (n),denotado como (f (n)), se define como:

    (f (n)) = O(n) (n)

    Una funcion g(n) es del orden exacto de f (n) cuando g(n) (f (n)).

    Pablo Sanchez (MATESCO) Complejidad Algortmica 10 / 28

  • Fundamentos de Complejidad Algortmica Operaciones entre Ordenes

    Operaciones entre Ordenes

    Menor o Igual

    Dados los ordenes de dos funciones O(f (n)) y O(g(n)),O(f (n)) O(g(n)) si y solo si O(f (n)) O(g(n))

    Orden de una suma de funciones

    O(f (n) + g(n)) = O(max(f (n), g(n)))

    Pablo Sanchez (MATESCO) Complejidad Algortmica 11 / 28

  • Fundamentos de Complejidad Algortmica Operaciones entre Ordenes

    Regla del Lmite

    Regla del Lmite

    Si lmnf (n)g(n) =

    (1) = k R+ f (n) O(g(n)) g(n) O(f (n))

    (2) = 0 R+ f (n) O(g(n)) g(n) / O(f (n))

    (3) = R+ f (n) / O(g(n)) g(n) O(f (n))

    Por tanto,

    O(1) O(log n) O(

    (n)) O(n) O(n log n)) O(n2) O(n2 log n)) O(n3) ... O(nk) O(2n) O(n!)

    Pablo Sanchez (MATESCO) Complejidad Algortmica 12 / 28

  • Fundamentos de Complejidad Algortmica Operaciones entre Ordenes

    Ordenes de Complejidad

    Pablo Sanchez (MATESCO) Complejidad Algortmica 13 / 28

  • Fundamentos de Complejidad Algortmica Operaciones entre Ordenes

    Ordenes de Complejidad

    Pablo Sanchez (MATESCO) Complejidad Algortmica 14 / 28

  • Fundamentos de Complejidad Algortmica Operaciones entre Ordenes

    Calculo de Complejidad de Programas Iterativos

    PROCEDIMIENTO OrdenarSeleccion(REF v: vEnteros) ES

    i, j, min, aux : ENTERO;

    PARA i DESDE 0 HASTA MAX_vENTERO-2 HACER

    min := v[i];

    PARA j DESDE i+1 HASTA MAX_vENTERO-1 HACER

    SI (v[j] < v[min]) ENTONCES

    min := j;

    FINSI

    FINPARA

    aux := v[min];

    v[min] := v[i];

    v[i] := aux;

    FINPARA

    FINPROCEDIMIENTO

    Pablo Sanchez (MATESCO) Complejidad Algortmica 15 / 28

  • Calculo de Complejidad de Algoritmos Iterativos

    Calculo de Complejidad de Algoritmos Iterativos

    Teorema de Anidacion

    Sean f (n), g(n) : N R+ y g(n) O(h(n)), entoncesf (n) g(n) O(f (n) h(n))

    Reglas informales para el calculo de complejidades algortmicas

    1 La complejidad de una secuencia de instrucciones S1;S2; esmax(O(S1),O(S2)).

    2 La complejidad de una sentencia condicional SI cond ENTONCES S1SINO S2 FINSI es max(O(cond),O(S1),O(S2)).

    3 La complejidad de una instruccion iterativa que ejecuta f (n) vecesuna secuencia de instrucciones de complejidad O(g(n)) esO(f (n) g(n))

    Pablo Sanchez (MATESCO) Complejidad Algortmica 16 / 28

  • Calculo de Complejidad de Algoritmos Iterativos

    Problema de la Convergencia

    Algoritmo Babilonico para el Calculo de una Raz Cuadrada

    // Pre: x debe ser positivo

    FUNCION raiz(x : Real) : Real ES

    base, altura : Real;

    base = x;

    altura = 1.0;

    MIENTRAS (base != altura) HACER

    base := (altura + base) / 2;

    altura := (x / base);

    FINMIENTRAS

    DEVOLVER base;

    FINFUNCION

    Cuantas iteraciones realiza el bucle?

    Pablo Sanchez (MATESCO) Complejidad Algortmica 17 / 28

  • Calculo de Complejidad de Algoritmos Recursivos Ecuaciones de Recurrencia

    Calculo de la Complejidad de Algoritmos Recursivos

    FUNCION factorial(n : ENTERO) : ENTERO ES

    result : ENTERO;

    SI (n == 0) ENTONCES

    result := 1;

    SINO

    result := n*factorial(n-1);

    FINSI

    DEVOLVER result;

    FINFUNCION

    t(0) = 3t(n) = t(n-1) + 3

    Pablo Sanchez (MATESCO) Complejidad Algortmica 18 / 28

  • Calculo de Complejidad de Algoritmos Recursivos Ecuaciones de Recurrencia

    Ecuaciones de recurrencia

    Ecuacion de recurrencia

    El valor una funcion para un cierto n se expresa en funcion de los valoresde la funcion para ns mas pequenos.

    t(n) =

    {

    g(n) si 0 n < ba t(n b) + h(n) si n b

    Pablo Sanchez (MATESCO) Complejidad Algortmica 19 / 28

  • Calculo de Complejidad de Algoritmos Recursivos Teorema Maestro

    Recurrencias para Algoritmos Divide y Venceras

    Esquema Algoritmos Divide y Venceras

    FUNCION DyV(p : Problema) : Solucion ES

    result : Solucion;

    SI esCasoBase(p) ENTONCES

    result := resuelve(p)

    SINO

    sub1, sub2 : Problema;

    sol1, sol2 : Solucion;

    divide(p,sub1,sub2);

    sol1 := DyV(sub1); sol2 := DyV(sub2);

    result := combina(sol1,sol2);

    FINSI

    DEVOLVER result;

    FINFUNCION

    Pablo Sanchez (MATESCO) Complejidad Algortmica 20 / 28

  • Calculo de Complejidad de Algoritmos Recursivos Teorema Maestro

    Recurrencias para Algoritmos Divide y Venceras

    Ecuacion de Recurrencia para Algoritmos Divide y Venceras

    t(n) =

    {

    c nk si 1 n < ba t(n

    b) + c nk si n b

    a, c R+; k R+ {0}; n, b N; b > 1

    Solucion de la Recurrencia para Algoritmos Divide y Venceras

    t(n)

    (nk) si a < bk

    (nk log(n)) si a = bk

    (nlog(a)) si a > bk

    a, c R+; k R+ {0}; n, b N; b > 1

    Pablo Sanchez (MATESCO) Complejidad Algortmica 21 / 28

  • Complejidad Computacional y Computabilidad Complejidad Computacional

    Complejidad Computacional

    Complejidad Computacional

    Rama de la teora de la computacion que se dedica a la clasificacion deproblemas computables de acuerdo a la dificultad inheren