View
3
Download
1
Category
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
Recommended