13
20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios para medir la eficiencia de un algoritmo 2. Tiempo de ejecución 3. Orden de magnitud 4. Reglas para calcular la complejidad del código 5. Complejidad en código recursivo

Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

1

TécnicasdeProgramaciónAvanzadas(TPA)

Tema1.Eficienciadelosalgoritmos

Tema1.Eficienciadelosalgoritmos

1. Criteriosparamedirlaeficienciadeunalgoritmo2. Tiempodeejecución3. Ordendemagnitud4. Reglasparacalcularlacomplejidaddelcódigo5. Complejidadencódigorecursivo

Page 2: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

2

Criteriosparamedirlaeficienciadeunalgoritmo

§ Paraunmismoproblemasepuedendiseñardistintosalgoritmos(soluciones)queloresuelvancorrectamente.

§ Debepodersedeterminarquéalgoritmoutilizar.

§ Ejemplo:¿Cuáleslamejorruta?– Lamáscorta.

– Lamásrápida.

– Laquenotengapeajes.

TécnicasdeProgramaciónAvanzadas(TPA)

Criteriosparamedirlaeficienciadeunalgoritmo

§ Paraellosecompararánsegúnuncriteriodeterminado.Losmásusuales:– Legibilidadyfacilidaddecomprensión,codificaciónydepuración.– Usoeficientedelosrecursos:tiempodeejecuciónyespaciode

memoria.– (Otros:reutilización,documentación,portabilidad,etc.)

§ Mediremoslaeficiencia segúnelsegundodeloscriterios(losprimerossepresuponen).

TécnicasdeProgramaciónAvanzadas(TPA)

Page 3: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

3

Criteriosparamedirlaeficienciadeunalgoritmo

§ Lamemoria yanoesunrecursocríticoàmediremoslaeficienciadeunalgoritmobasándonoscasisiempreensutiempodeejecución.

§ Eltiempodeejecuciónnodependerádelapotencia delamáquinadondeseejecuta.Habráqueestudiarloenfuncióndelalgoritmo utilizado.

TécnicasdeProgramaciónAvanzadas(TPA)

Tema1.Eficienciadelosalgoritmos

1. Criteriosparamedirlaeficienciadeunalgoritmo2. Tiempodeejecución3. Ordendemagnitud4. Reglasparacalcularlacomplejidaddelcódigo5. Complejidadencódigorecursivo

Page 4: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

4

Tiempodeejecución

§ Engeneral,eltiempodeejecucióndeunprogramadependedevariosfactores:

1. Nºdevecesqueseejecutacadainstrucción.2. Compiladorutilizado(unainstruccióndealtonivelse

puedetraduciralenguajemáquinadediferentesformas).

3. Elordenadorutilizado(puedevariareltiempodeejecucióndecadainstrucciónmáquina).

§ Nosbasaremossóloenelprimerfactor.Losdemásnosepuedenpresuponer.

TécnicasdeProgramaciónAvanzadas(TPA)

Tiempodeejecución

§ Realizaremosunaestimación aprioridelafrecuenciadeejecución.

§ Eneltiempodeejecucióndeuncasoconcretotambiéninfluye:

– Nºdedatosdeentrada,– Estructuradelaentrada,– Distribucióndelaentrada.– Calidaddelcódigofuenteycalidaddelcódigo

máquinaè nosecalculaelnºdeinstruccionesejecutadas,sinoelnºdevecesqueseejecutacadainstrucción.

TécnicasdeProgramaciónAvanzadas(TPA)

Page 5: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

5

Tiempodeejecución

§ Dependiendodelaentradadelproblema,puedendarse3casos:

• CasoPeor:eltiempodeejecuciónesmáximo.• CasoMejor:eltiempodeejecuciónesmínimo.• CasoMedio:casomásprobable.Tiempodeejecución

=mediaestadísticadetodosloscasosposibles.

§ Paraprobarlaeficienciadeunalgoritmousaremoscomomedidaeltiempodeejecuciónenelpeorcaso:T(n).

TécnicasdeProgramaciónAvanzadas(TPA)

Tiempodeejecución

§ Ejemplo:– ¿CuántasvecesseejecutacadainstrucciónsieltamañoN

delalistaes4?¿Ysies6?

boolean buscar (TElemento item, Lista L) {{Pre: N>0}{Post: Buscar = $i:1<=i<=N: L[i]=item}boolean encontrado = false;int cont = 0;while ((!encontrado) && (cont < L.longitud())){

cont++; encontrado = L[cont] == item;

}return encontrado;

}

TécnicasdeProgramaciónAvanzadas(TPA)

12

34

5

6

Page 6: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

6

Tiempodeejecución

§ Enelpeordeloscasos:

– Amedidaqueseincrementaeltamañon delalista,elvalordeT(n) crecedemaneraproporcionalanè T(n)tieneunordendemagnitudden.

TécnicasdeProgramaciónAvanzadas(TPA)

Instrucción Código Ejecuciones

1 boolean encontrado = false; 1

2 int cont = 0; 1

3 while ((!encontrado) &&

(cont < L.longitud()))n+1

4 cont++; n

5 encontrado = L[cont] == item; n

6 return encontrado; 1

Total 3n+4

Tiempodeejecución

§ T(n)Î O(f(n)),si$ ctes cyn0 talqueT(n)£ c*f(n)," n³ n0§ T(n)ÎW(g(n)),si$ ctes cyn0 talqueT(n)³ c*g(n), " n³ n0§ T(n)ÎQ(h(n)),siysóloT(n)Î O(h(n))yT(n)ÎW(h(n))

§ SiT(n)ÎO(f(n))à T(n)nuncacrecemásrápidoquef(n).

§ SiT(n)ÎW(g(n))à T(n)crece,almenos,almismoritmoqueg(n)

§ SiT(n)ÎQ(h(n))à representaexactamentelatasadecrecimientodeT(n)

TécnicasdeProgramaciónAvanzadas(TPA)

Page 7: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

7

Tema1.Eficienciadelosalgoritmos

1. Criteriosparamedirlaeficienciadeunalgoritmo2. Tiempodeejecución3. Ordendemagnitud4. Reglasparacalcularlacomplejidaddelcódigo5. Complejidadencódigorecursivo

Tiempodeejecución

§ Reglasparaelcálculodecomplejidaddeunalgoritmo

1. SiT1(n)Î O(f(n))yT2(n)Î O(g(n)),entonces:

a) T1(n)+T2(n)ÎMax(O(f(n)),O(g(n)))b) T1(n)*T2(n)Î O(f(n)*g(n))

2. SiT(x)esunpolinomiodegradogà T(x)Î O(xg)

TécnicasdeProgramaciónAvanzadas(TPA)

Page 8: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

8

Tiempodeejecución

§ Definiremosunarelaciónentrelosdistintosórdenesdemagnituddelasfuncionesf(n)(siempreválidaapartirdeunn0determinado):O(1)<O(logn)<O(n)<O(n·log n)<O(n2)<O(n3)<...<O(2n)<O(n!)<O(nn)

" n>=n0§ Estanotación(O)indicaunlímitesuperior def(n).

Ejemplo:sif(n)esO(n2)à tambiénesO(n3),O(2n)...

§ Alhallarlacomplejidadsedesprecianlasctes deproporcionalidad.– Inconveniente:nomuybuenoparavalorespequeñosdela

entrada.Ejemplo:

T1(n)=5n3 =O(n3)T2(n)=100n2=O(n2)5n3/100n2=n/20à paran<20,T1 esmejor.

TécnicasdeProgramaciónAvanzadas(TPA)

Tiempodeejecución

TécnicasdeProgramaciónAvanzadas(TPA)

0

5

10

15

20

25

30

35

40

45

50

0 1 2 3 4 5 6 7 8 9 10

n

log2n

n·log2n

sqr(n)

n2

n3

2n

0

200

400

600

800

1000

1200

0 2 4 6 8 10 12 14 16 18 20

n

log2n

n·log2n

sqr(n)

n2

n3

2n

Page 9: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

9

Tiempodeejecución

TécnicasdeProgramaciónAvanzadas(TPA)

0

5

10

15

20

25

30

35

40

45

50

0 1 2 3 4 5 6 7 8 9 10

n

log2n

n·log2n

sqr(n)

n2

n3

2n

0

200

400

600

800

1000

1200

0 2 4 6 8 10 12 14 16 18 20

n

log2n

n·log2n

sqr(n)

n2

n3

2n

Tema1.Eficienciadelosalgoritmos

1. Criteriosparamedirlaeficienciadeunalgoritmo2. Tiempodeejecución3. Ordendemagnitud4. Reglasparacalcularlacomplejidaddelcódigo5. Complejidadencódigorecursivo

Page 10: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

10

Reglasparacalcularlacomplejidaddelcódigo

§ ¿Cómosetraducetodoestoalahoradecalcularlacomplejidaddenuestrocódigo?– Aplicaremosdiferentesherramientas– Dependerándeloselementosoestrategiasdeprogramaciónutilizadas

§ Sentenciassimples– CadainstrucciónmáquinaseejecutaenuntiempoconstanteKi.– EscogemoscomounidadelmayortiempoKi.– CadasentenciaseconsideradeO(1).– Válidoparamanipulaciones(asignaciones,comparaciones,etc.)sobredatos

simples.§ Composiciónsecuencial:

– Paraunasecuenciadesentenciasà elmáximodetodasellas.

TécnicasdeProgramaciónAvanzadas(TPA)

Reglasparacalcularlacomplejidaddelcódigo

§ SelecciónCondicional(If then else,Case):– Deentretodoslosposiblescaminosà elmáximoencomplejidad.

§ Repeticiones:– å (complej.cuerpobucle+complej.condiciónterminación)

§ Llamadasaotrosmódulos(procedimientosofunciones):– Comosifuesenotraspartesdelprograma

TécnicasdeProgramaciónAvanzadas(TPA)

Page 11: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

11

Reglasparacalcularlacomplejidaddelcódigo

§ Ejemplos:

– x=x+1 O(1)

– for (i=1;i<=N;i++){X=X+1; O(n)

}

– for (i=1;i<=N;i++){for (j=1;j<=N;j++){x=x+1; O(n2)}

}

TécnicasdeProgramaciónAvanzadas(TPA)

Reglasparacalcularlacomplejidaddelcódigo

§Ejemplo:

voidburbuja(TElementoA[]){for (inti=1;i<=A.length;i++){

for (j=A.length;j>i;j--){if (A[j-1]>A[j]){

TElementotemp=A[j-1];A[j-1]=A[j];A[j]=temp;

}}

}}

TécnicasdeProgramaciónAvanzadas(TPA)

Page 12: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

12

Reglasparacalcularlacomplejidaddelcódigo

§Fórmulashabituales:

TécnicasdeProgramaciónAvanzadas(TPA)

å

å

å

=

=

=

++=

+=

=

n

i

n

i

n

i

nnni

nni

n

1

2

1

1

6)12)(1(

2)1(

1 åå==

- ==n

i

n

in

ii

11

1 )log(1

T(n)=

T(n)ÎQ(nk+1)sia=1T(n)ÎQ(andivb)sia>1

Reglasparacalcularlacomplejidaddelcódigo

§ Recursividad1. ReducciónporSUSTRACCIÓN2. ReducciónporDIVISIÓN

§ Reducciónporsustracción

TécnicasdeProgramaciónAvanzadas(TPA)

c0nk0 si 0 <= n < b

a·T(n - b) + c1nk si n >=b

Complejidaddelcasobase

Complejidaddelcasogeneral Parte

recursivaParteNOrecursiva

a: número de llamadas recursivas idénticas en cada invocación del programa

n-b: tamaño de los subproblemas generados

nk:: coste de las instrucciones que no son llamadas recursivas

Page 13: Técnicas de Programación Avanzadas (TPA) 1...20/1/17 1 Técnicas de Programación Avanzadas (TPA) Tema 1. Eficiencia de los algoritmos Tema 1. Eficiencia de los algoritmos 1. Criterios

20/1/17

13

T(n)=

T(n)Î Q(nk)sia<bk

T(n)Î Q(nklogb n)sia=bk

T(n)Î Q(nlogba)sia>bk

Reglasparacalcularlacomplejidaddelcódigo

§ Recursividad1. ReducciónporSUSTRACCIÓN2. ReducciónporDIVISIÓN

§ Reducciónpordivisión

TécnicasdeProgramaciónAvanzadas(TPA)

c0nk0 si 0 <= n < b

a·T(n / b) + c1nk si n >=b

a: número de llamadas recursivas idénticas en cada invocación del programa

n-b: tamaño de los subproblemas generados

nk:: coste de las instrucciones que no son llamadas recursivas