Complejidad Algoritmica

Preview:

DESCRIPTION

Como Se Mide La Complejidad Algorítmica

Citation preview

  • 1Complejidad

    Carlos Delgado KloosIngeniera TelemticaUniv. Carlos III de Madrid

    cdk@it.uc3m.es Java: Complejidad / 1

    Comparacin

    a long fib (int n) a long fibo (int {if (n

  • 2Cmo medimos?

    aMidiendo el tiempo de ejecucin (enaMidiendo el tiempo de ejecucin (en funcin del tamao de la entrada)No podemos probar con todas las entradasEs necesario implementar el algoritmoDepende del software y el hardware

    aBusquemos otra medidaaBusquemos otra medidaMs abstractaMs fcil de obtener

    cdk@it.uc3m.es Java: Complejidad / 3

    Cmo medimos?

    aAsociamos a cada algoritmo: f(n)aAsociamos a cada algoritmo: f(n)aEmplearemos el caso peor para

    caracterizar el tiempo de ejecucinaEs ms fcil de calcularaInteresa la velocidad de crecimiento del

    tiempo de ejecucin en funcin del

    Tamao de la entrada

    tiempo de ejecucin en funcin del tamao de la entradaaComportamiento asinttico

    cdk@it.uc3m.es Java: Complejidad / 4

  • 3Cmo medimos?

    aAsociamos a cada operacin primitiva un tiempo aAsociamos a cada operacin primitiva un tiempo de ejecucin constante:AsignacinLlamada a mtodoOperacin aritmtica, etc.Indexacin en arraySeguir una referenciaVolver de un mtodoEtc.

    cdk@it.uc3m.es Java: Complejidad / 5

    Ejemplo(en pseudocdigo)

    aHallar el mximo de un arrayyaEntrada: un array A con n enterosaSalida: el elemento mayor de AaAlgoritmo: arrayMax(A,n)acurrent=A[0]for i=1 to n-1 do

    if current

  • 4Ejemplo(en pseudocdigo)

    acurrent=A[0][ ]for i=1 to n-1 do

    if current

  • 5Notacin O

    a7n-3 es O(n)a7n 3 es O(n)c=7, n0=17n-3 7n

    a20n3+10n log n+5 es O(n3)a3 log n + log log n es O(log n)g g g ( g )a2100 es O(1)a5/n es O(1/n)

    cdk@it.uc3m.es Java: Complejidad / 9

    Crecimientode funciones

    log n n n n log n n2 n3 2nlog n n n n log n n n 21 1,4 2 2 4 8 4

    2 2,0 4 8 16 64 16

    3 2,8 8 24 64 512 256

    4 4,0 16 64 256 4.096 65.536

    5 5,7 32 160 1.024 32.768 4.294.967.296

    6 8,0 64 384 4.096 262.144 1,8 * 1019

    7 11,0 128 896 16.536 2.097.152 3,4 * 1038

    cdk@it.uc3m.es Java: Complejidad / 10

  • 6Crecimientode funciones

    cdk@it.uc3m.es Java: Complejidad / 11

    Tamao mximode un problema

    Tiempo de 1 d 1 i t 1 hTiempo de ejecucin 1 segundo 1 minuto 1 hora

    400n 2.500 150.000 9.000.000

    20nlog n 4.096 166.666 7.826.0872n2 707 5 477 42 4262n 707 5.477 42.426

    n4 31 88 244

    2n 19 25 31

    cdk@it.uc3m.es Java: Complejidad / 12

  • 7Actividad

    aVer videoaVer videowww.youtube.com/watch?v=hM1x4RljmnE

    cdk@it.uc3m.es Java: Complejidad / 13

    Ejemplo

    aDado un array A de n nmerosaDado un array A de n nmerosaCalcular otro array B, tal que:

    ij=0A[j]B[i]=

    i+1

    cdk@it.uc3m.es Java: Complejidad / 14

  • 8Solucin 1

    afor i=0 to n-1 doa=0for j=0 to i do

    a=a+A[j]B[i]=a/(i+1)

    return B

    cdk@it.uc3m.es Java: Complejidad / 15

    Solucin 1: Anlisis

    aPartes:aPartes:Inicializar y devolver array B: O(n)Bucle i: se ejecuta n vecesBucle j: se ejecuta 1+2+3+...+n=n(n+1)/2

    veces: O(n2)

    aTotal:O(n)+O(n)+O(n2)= O(n2)Orden cuadrtico

    cdk@it.uc3m.es Java: Complejidad / 16

  • 9Optimizacin

    aB[i]=(A[0]+...+A[i])/(i+1)[ ] ( [ ] [ ])/( )aB[i+1]=(A[0]+...+A[i]+A[i+1])/(i+2)

    aB[i+1]=(B[i]*(i+1))+A[i+1]/(i+2)

    cdk@it.uc3m.es Java: Complejidad / 17

    Solucin 2

    as=0for i=0 to (n-1) do

    s=s+A[i]B[i]=s/(i+1)

    return B

    cdk@it.uc3m.es Java: Complejidad / 18

  • 10

    Solucin 2: Anlisis

    aPartes:aPartes:Inicializar y devolver array B: O(n)Inicializar s: O(1)Bucle i: se ejecuta n veces

    aTotal:O(n)+O(1)+O(n)=O(n)Orden lineal

    cdk@it.uc3m.es Java: Complejidad / 19