Upload
joel-frank-huarayo-quispe
View
3
Download
1
Embed Size (px)
DESCRIPTION
Como Se Mide La Complejidad Algorítmica
Citation preview
1Complejidad
Carlos Delgado KloosIngeniera TelemticaUniv. Carlos III de Madrid
[email protected] 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
[email protected] 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
[email protected] 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.
[email protected] 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)
[email protected] 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
[email protected] Java: Complejidad / 10
6Crecimientode funciones
[email protected] 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
[email protected] Java: Complejidad / 12
7Actividad
aVer videoaVer videowww.youtube.com/watch?v=hM1x4RljmnE
[email protected] 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
[email protected] 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
[email protected] 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
[email protected] 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)
[email protected] Java: Complejidad / 17
Solucin 2
as=0for i=0 to (n-1) do
s=s+A[i]B[i]=s/(i+1)
return B
[email protected] 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
[email protected] Java: Complejidad / 19