Está en la página 1de 52

COMPLEJIDAD COMPUTACIONAL

Indice

1 Introducci on

2 6

2 Consumo de recursos: costes espaciales y temporales 3 Caracterizaci on de los costes 10 27

4 Cotas del coste: casos mejor, peor y promedio

5 Notaci on asint otica: jerarqu a de costes computacionales 6 Aspectos adicionales en complejidad computacional 50

34

Indice

1 Introducci on

2 6

2 Consumo de recursos: costes espaciales y temporales 3 Caracterizaci on de los costes 10 27

4 Cotas del coste: casos mejor, peor y promedio

5 Notaci on asint otica: jerarqu a de costes computacionales 6 Aspectos adicionales en complejidad computacional 50

34

Introducci on

Generalmente, un problema dado puede resolverse mediante muy diversos algoritmos o programas. No todas las soluciones son igualmente buenas. De qu e depende la calidad de un programa que resuelve un problema? Elegancia de la idea en la que se basa el algoritmo? Claridad en la organizaci on del c odigo del programa? Vistosidad de la presentaci on de los resultados? Eciencia en la forma de obtener la soluci on? Desde un punto de vista computacional, el factor esencial es la eciencia.

Introducci on

El an alisis de algoritmos es una actividad muy importante en el proceso de desarrollo, especialmente en entornos con recursos restringidos (en tiempo o en memoria). El an alisis de algoritmos es necesario para: Comparar dos algoritmos distintos. Predecir el comportamiento de un algoritmo en circunstancias extremas. Ajustar los par ametros de un algoritmo para obtener los mejores resultados.

Introducci on

El an alisis se puede realizar de dos formas distintas: emp rica (experimental), o te oricamente. Tipo Experimental Ventajas Sencilla, resultados reales Inconvenientes Hace falta tener dos implementaciones igual de cuidadas, hacen falta datos reales, m as costosa, dependiente de la m aquina Resultados no exactos

Te orica

Flexible, barata, independiente de la m aquina

Indice

1 Introducci on

2 6

2 Consumo de recursos: costes espaciales y temporales 3 Caracterizaci on de los costes 10 27

4 Cotas del coste: casos mejor, peor y promedio

5 Notaci on asint otica: jerarqu a de costes computacionales 6 Aspectos adicionales en complejidad computacional 50

34

Consumo de recursos: costes espaciales y temporales


Eciencia: Capacidad de resolver el problema propuesto empleando un bajo consumo de recursos computacionales Dos factores fundamentales de la eciencia: Coste espacial o cantidad de memoria requerida Coste temporal o tiempo necesario para resolver el problema. Para resolver un problema dado, un algoritmo o programa A ser a mejor que otro B si A resuelve el problema en menos tiempo y/o emplea menos cantidad de memoria que B . En ocasiones tiempo y memoria son recursos competitivos y un buen algoritmo es aquel que resuelve el problema con un buen compromiso tiempo/memoria. En lo que sigue nos ocuparemos principalmente del coste temporal.

Un ejemplo simple
El tiempo o la memoria por s solos no son realmente adecuados para valorar la calidad de un programa: Consideremos tres programas simples para calcular 102: int main(){ /*A1*/ int m; m = 10 * 10; /*producto*/ printf ("%d\n", m); } int main(){ /*A3*/ int i,j,m; m=0; for (i=1; i<=10; i++) for (j=1; j<=10; j++) m++; /*sucesor*/ printf ("%d\n", m); } Sean t, t+, ts los tiempos que se requieren para un producto, una suma y un sucesor : TA1 = t TA2 = 10 t+ TA3 = 100 ts int main(){ /*A2*/ int i,m; m=0; for (i=1; i<=10; i++) m = m + 10; /*suma*/ printf ("%d\n", m); }

Un ejemplo simple (cont.)

Supongamos que A1, A2, A3 se ejecutan en cuatro computadores con diferentes caracter sticas (diferentes tiempos de ejecuci on de sucesor, suma y producto ): t t+ ts A1 A2 A3 100 10 1 100 100 100 s s s s s s 50 10 2 50 100 200 s s s s s s 100 5 1 100 50 100 s s s s s s 200 10 0,5 200 100 50 s s s s s s

qu e programa es mejor, A1, A2, A3 ?

Para cada computador hay un mejor programa

Indice

1 Introducci on

2 6

2 Consumo de recursos: costes espaciales y temporales 3 Caracterizaci on de los costes 10 27

4 Cotas del coste: casos mejor, peor y promedio

5 Notaci on asint otica: jerarqu a de costes computacionales 6 Aspectos adicionales en complejidad computacional 50

34

Problemas, instancias y talla de una instancia

Nuestro problema simple era demasiado restrictivo. En la pr actica querremos calcular no s olo 102 sino, en general, n2, donde n es un dato del problema. Seg un este nuevo planteamiento, el problema concreto de calcular 102 se considera una instancia del problema general de calcular n2. Dado un problema, en general no todas sus instancias son igual de grandes. A cada instancia se le puede asignar un n umero entero que mida la envergadura de esa instancia. A este entero se le denomina talla. En nuestro problema de c alculo de n2, una medida natural de la talla es justamente n: As , la talla de la instancia 102 es 10 y la talla de la instancia 2 345 6782 es 2 345 678.

Coste en funci on de la talla del problema


Podemos reescribir f acilmente A1, A2, A3 para calcular n2 en vez de 102: int main(){ /*A1*/ int n, m; scanf ("%d", &n); m = n * n; /*producto*/ printf ("%d\n", m); } int main(){ /*A3*/ int i, j, n, m; m=0; scanf ("%d", &n); for (i=1; i<=n; i++) for (j=1; j<=n; j++) m++; /*sucesor*/ printf ("%d\n", m); } Talla=n; costes temporales (s): TA1 = t TA2 = t+ n TA3 = ts n2 int main(){ /*A2*/ int i, n, m; m=0; scanf ("%d", &n); for (i=1; i<=n; i++) m = m + n; /*suma*/ printf ("%d\n", m); }

El coste sigue dependiendo de t, t+, ts!

El coste como funci on de la talla sigue sin ser adecuado


Intuitivamente parece claro que el mejor programa es A1 y el peor A3. Pero, incluso jando las caracter sticas del computador, veremos que esta intuici on no se mantiene claramente. Por ejemplo si jamos t = 100 s, t+ = 5 s, ts = 1 s: TAi(n) 100 5n n2 n=4 100 s 20 s 16 s n = 10 100 s 50 s 100 s n = 1 000 100 s 5 000 s 1 000 000 s

A1 A2 A3

qu e programa es mejor, A1, A2, A3 ? Para cada talla hay un mejor programa
Una buena caracterizaci on del coste deber a permitir establecer la calidad de un programa con independencia tanto del computador como de la talla de las instancias concretas a procesar.

Coste asint otico


En general, tendr amos un comportamiento relativo de A1, A2, A3 tal como:
Clculo de n: costes relativos de A1, A2, A3 A3

Coste temporal

A3 < A2 < A1

A2 < A3 < A1

A2 < A1 < A3

A1 < A2 < A3

A2 A1

0 0 Talla

Una buena caracterizaci on computacional de un programa: Dependencia funcional del coste con la talla para tallas grandes!

Ventajas de la caracterizaci on asint otica del coste computacional en funci on de la talla

Generalmente los programas s olo son u tiles para resolver problemas de gran talla (si es peque na podr amos resolverlos manualmente sin dicultad) Al considerar s olo tallas grandes, se pueden hacer aproximaciones sencillas que simplican considerablemente el an alisis del coste. La bondad relativa de distintos programas ya no depende de los valores concretos de los tiempos de ejecuci on de las distintas operaciones elementales empleadas (siempre que estos no dependan de la talla), ni de la talla concreta de las instancias del problema a resolver

Simplicaci on del an alisis del coste: concepto de paso


Un PASO es la ejecuci on de un segmento de c odigo cuyo tiempo de proceso no depende de la talla del problema considerado, o bien est a acotado por alguna constante. Coste computacional de un programa: N umero de PASOS en funci on de la talla del problema. Construcciones a las que se les puede asignar 1 PASO : Asignaci on, operaciones aritm eticas o l ogicas, comparaci on, acceso a un elemento de vector o matriz, etc. Cualquier secuencia nita de estas operaciones cuya longitud no dependa de la talla. Construcciones a las que no se le puede asignar 1 PASO, sino un n umero de PASOS en funci on de la talla: Asignaci on de variables estructuradas (ej. vectores) cuyo n umero de elementos dependa de la talla Bucles cuyo n umero de iteraciones dependa de la talla.

An alisis de costes (PASOS) de los programas de c alculo de n2


int main(){ /*A1*/ int n, m; scanf ("%d", &n); m = n * n; /*producto*/ printf ("%d\n", m); } int main(){ /*A3*/ int i, j, n, m; m=0; scanf ("%d", &n); for (i=1; i<=n; i++) for (j=1; j<=n; j++) m++; /*sucesor*/ printf ("%d\n", m); } TA1(n) = 1, TA2(n) = n, TA3(n) = n2 int main(){ /*A2*/ int i, n, m; m=0; scanf ("%d", &n); for (i=1; i<=n; i++) m = m + n; /*suma*/ printf ("%d\n", m); }

Otro ejemplo de an alisis del coste en PASOS:


impresi on de los elementos de un vector en orden inverso #include <stdio.h> #dene MAXN 1000000 int main() /* invOrd.c */ { int i, n, x, v[MAXN]; n = 0; /* Inicializa contador de datos (talla) */ printf ("Teclear datos (fin: ^D)\n"); while ((n < MAXN) && (scanf ("%d", &x) == 1)) { /* Lee datos */ v[n] = x; /* Actualiza talla */ n++; } /* Imprime resultados en orden inverso */ for (i = n-1; i >= 0; i--) printf ("%d ", v[i]); printf ("\n"); return 0; } PASO: Accesos a v; Talla = n; TinvOrd(n) = n + n = 2n PASOS

M as ejemplos de an alisis del coste en PASOS:


b usqueda del elemento m as cercano a la media #include <stdio.h> #include <math.h> #dene MAX 100000 int main() { int cercano, i, n = 0, aux, A[MAX]; double media, suma; while (n < MAX && scanf ("%d", &aux) == 1) { A[n] = aux; n++; } suma = 0; for (i = 0; i < n; i++) suma += A[i]; media = suma/n; cercano = 0; /* C alculo de la media */ for (i = 1; i < n; i++) /* B usqueda del m as cercano */ if (fabs(A[i]-media) < fabs(A[cercano]-media)) cercano = i; printf ("El m as cercano es A[%d]=%d\n", cercano, A[cercano]); } PASO: Accesos a A; Talla = n; Tmascerca(n) =??? PASOS

M as ejemplos de an alisis del coste en PASOS:


c alculo de la moda de una serie de edades: lectura de datos #include <stdio.h> #dene MAXDATOS 100000 #dene MAXEDAD 150 int main() /* modax.c: c alculo de la moda */ { int i, j, n, edad, frec, maxFrec, moda, edades[MAXDATOS]; n = 0; /* Inicializa contador de datos (talla) */ printf ("Teclear edades, finalizando con ^D\n"); while ((n < MAXDATOS) && (scanf ("%d", &edad) != EOF)) /* Lee edades if ((edad >= 0) && (edad < MAXEDAD)) { /* hasta EOF, edades[n] = edad; /* las memoriza n++; /* y actualiza n }

*/ */ */ */

M as ejemplos de an alisis del coste en PASOS:


c alculo (ineciente) de la moda de una serie de edades /* moda0.c: c alculo (ineficiente) de la moda */ maxFrec=0; /* Explora n veces edades[] para */ for (i = 0; i < n; i++) { /* determinar cu al es la edad */ frec = 0; /* que mas se repite (moda) */ for (j = 0; j < n; j++) if (edades[i] == edades[j]) frec++; if (frec > maxFrec) { maxFrec = frec; moda = edades[i]; } } printf ("Leidos %d datos; Moda=%d (frecuencia=%d)\n", n, moda, maxFrec); return 0; } PASO: Comparaciones en if; Talla = n; Tmod(n) =??? PASOS

M as ejemplos de an alisis del coste en PASOS:


c alculo m as eciente de la moda de una serie de edades /* moda1.c: c alculo (poco eficiente) de la moda */ maxFrec = 0; /* Explora edades[] maxEdad veces para */ for (i = 0; i < MAXEDAD; i++) { /* determinar cu al es la edad */ frec = 0; /* que m as se repite (moda) */ for (j = 0; j < n; j++) if (edades[j] == i) frec++; if (frec > maxFrec) { maxFrec = frec; moda = i; } } printf ("Leidos %d datos; Moda=%d (frecuencia=%d)\n", n, moda, maxFrec); return 0; } PASO: Comparaciones en if; Talla = n; Tmoda(n) =??? PASOS

M as ejemplos de an alisis del coste en PASOS:


c alculo eciente de la moda de una serie de edades #include <stdio.h> #dene MAXEDAD 150 int main() /* moda.c: c alculo eficiente de la moda */ { int n = 0, edad, maxFrec = 0, moda, frecs[MAXEDAD]; /* Inicializa vector de frecuencias */ for (edad = 0; edad < MAXEDAD; edad++) frecs[edad] = 0; printf ("Teclear edades, fin con ^D\n"); /* Lee edades hasta EOF */ while (scanf ("%d", &edad) != EOF) /* y actualiza frecuencias */ if ((edad >= 0) && (edad < MAXEDAD)) { n++; frecs[edad]++; } for (edad = 0; edad < MAXEDAD; edad++) /* m ax. frecuencia (moda) */ if (frecs[edad] > maxFrec) { maxFrec = frecs[edad]; moda = edad; } printf ("Leidos %d datos; Moda=%d (frecuencia=%d)\n", n,moda,maxFrec); } PASO: Comparaciones en if; Talla = n; Tmoda(n) =??? PASOS

Costes de las variantes del c alculo de la moda:


representaci on gr aca

80 70 60 Tiempo (segundos) 50 40 30 20 10 0

moda0 moda1 moda

10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 Talla (nmero de edades procesadas)

Costes de las variantes del c alculo de la moda:


comparaci on de las versiones m as ecientes

0.7 0.6 0.5 Tiempo (segundos) 0.4 0.3 0.2 0.1 0

moda0 moda1 moda

10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 Talla (nmero de edades procesadas)

M as ejemplos de an alisis del coste en PASOS:


funciones extra nas #include <stdio.h> int f1(int x, int n) { int i; for (i = 1; i <= n; i++) x += i; return x; } int main() { int a, n; scanf ("%d", &n); a = f2(0, n); printf ("%d\n", f1(a, n)); return 0; }

int f2(int x, int n) { int i; for (i = 1; i <= n; i++) x += f1(i, n); return x; } PASO: +=; Talla = n; Tmain(n) =??? PASOS

Indice

1 Introducci on

2 6

2 Consumo de recursos: costes espaciales y temporales 3 Caracterizaci on de los costes 10 27

4 Cotas del coste: casos mejor, peor y promedio

5 Notaci on asint otica: jerarqu a de costes computacionales 6 Aspectos adicionales en complejidad computacional 50

34

A menudo el coste NO es (s olo) funci on de la talla


En los ejemplos vistos hasta ahora, todas las instancias de una talla dada ten an el mismo coste computacional. Pero esto no es siempre as . En el siguiente ejemplo, cu al es el coste de la funci on busca(n)?: #include <stdio.h> #dene MAXN 1000000 int busca(int *v, int n, int x) /* busca x en v[0...n-1] */ { int i; for (i=0; i<n; i++) if (v[i] == x) return i; return -1; }

A menudo el coste NO es (s olo) funci on de la talla


int main() /* busca.c */ { int i, x, aux; int v[MAXN], n = 0;

/* Vector donde buscar y su talla */

printf ("Teclear datos, fin con ^D)\n"); while ((n < MAXN) && (scanf ("%d", &aux) != EOF)) { /* lee v[] */ v[n] = aux; n++; } printf ("Dato a buscar: "); while (scanf ("%d", &x) == 1) { i = busca(v, n, x); printf ("Posici on de %d: %d\n", x, i); printf ("Dato a buscar: "); } return 0; } PASO: comparaci on en if; Talla = n; Tbusca(n) = ??? Depende del contenido del vector y del valor concreto del elemento a buscar!

Extremos del coste: casos mejor, peor y promedio


Nmero de PASOS requeridos por busca

Cota Superior (peor caso) Costes de cada Instancia Coste Promedio Coste temporal Cota Inferior (mejor caso)

0 0 Talla
b Tbusca (n) = 1 w Tbusca (n) = n m Tbusca (n) = n/2

A veces es dif cil calcular costes exactos para cada talla. Ejemplo:
#include <stdio.h> #dene K 64 #dene maxN 1000000 int main() /* raro.c: Realiza un extra~ no proceso sobre un vector */ { int i, j, k, n, x, X[maxN], pasos; n = 0; pasos = 1; printf ("Teclear datos\n"); while ((n < maxN) && (scanf ("%d", &x) != EOF)) { X[n] = x; n++; }

/* lee datos */

Ejemplo (cont.)
for (i = 2; i < n; i++) { /* procesa datos */ for (k = 1; k <= K; k++) X[i] = X[i] + k; if (n % 3 == 0) { for (k = 1; k <= K; k++) X[i] = X[i] - k; if ((i % 2 == 0) && (X[i] != X[i-1])) for (j = i; j <= n - 2; j++) for (k = 1; k <= K; k++) X[i] = k * X[i]; } else for (j = i; j <= n - i; j = j + 2) if (X[i] % 2 == 0) for (k = 1; k <= K; k++) X[i] = X[i] + 2 * k; } for (i = 0; i < n; i++) printf ("%d\n", X[i]); } PASO: accesos a X. El n umero total de pasos var a de manera diferente con las instancias de cada talla seg un esta sea o no m ultiplo de 3.

Cotas superior e inferior de los costes


Nmero de PASOS requeridos por el programa raro

Cota Superior Coste Peor caso Costes Instancias Coste temporal Coste Mejor caso Cota Inferior

0 0 Talla

Generalmente es suciente determinar las cotas asint oticas ; es decir para talla >>>

Indice

1 Introducci on

2 6

2 Consumo de recursos: costes espaciales y temporales 3 Caracterizaci on de los costes 10 27

4 Cotas del coste: casos mejor, peor y promedio

5 Notaci on asint otica: jerarqu a de costes computacionales 6 Aspectos adicionales en complejidad computacional 50

34

Aspectos esenciales en la determinaci on de costes computacionales


El coste no se puede expresar por un u nico valor (ej. el tiempo de ejecuci on, sino que debe ser una funci on de la talla del problema a resolver La comparaci on de funciones de coste debe ser insensible a constantes de implementaci on tales como los tiempos concretos de ejecuci on de operaciones individuales (cuyo coste sea independiente de la talla) La independencia de las constantes se consigue considerando s olo el comportamiento asint otico de la funci on de coste (es decir, para tallas grandes) A menudo ocurre que, para una talla dada, hay diversas instancias con costes diferentes, por lo que el coste no puede expresarse propiamente como funci on de la talla En estas ocasiones conviene determinar cotas superiores e inferiores de la funci on coste; es decir, en el peor caso y en el mejor caso Hay situaciones en las que incluso las cotas para mejores y peores casos son funciones complicadas. Generalmente bastar a determinar funciones simples que acoten superior e inferiormente los costes de todas las instancias para tallas grandes

Notaci on asint otica


Abstracci on de las constantes asociadas al concepto de PASO, de la noci on de tallas grandes y de la de cotas asint oticas: Sea f : N R+ una funci on de los naturales en los reales positivos. Se dene: . O(f (n)) = {t : N R+ | (c R+, n0 N), n n0 t(n) cf (n)} . (f (n)) = {t : N R+ | (c R+, n0 N), n n0 t(n) cf (n)} . (f (n)) = O(f (n)) (f (n)) A partir de la denici on de (f (n)) se tiene: (f (n)) = {t : N R+ | (c1, c2 R+, n0 N), n n0 c1f (n) t(n) c2f (n)}

Ejemplos

t(n) = 3n + 2 t(n) = 100n + 6 t(n) = 10n2 + 4n + 2 t(n) = n2 + 1000n 100

Ejemplos

t(n) = 3n + 2 t(n) = 100n + 6

4n n 2 3n n 1

t(n) O(n) t(n) (n) ;

t(n) (n) t(n) (n)

101n n 6 t(n) O(n) 100n n 1 t(n) (n) ; 11n2 n 5 t(n) O(n2) 10n2 n 1 t(n) (n2) ; 2n2 n 1000 t(n) O(n2) n2 n 1 t(n) (n2) ;

t(n) = 10n2 + 4n + 2 t(n) = n2 + 1000n 100

t(n) (n2) t(n) (n2)

Ejemplos de costes en notaci on asint otica


A1, A2, A3: Moda: TA1(n) (1) TA2(n) (n) TA3(n) (n2)

Tmoda(n) (n2) (ineciente)


Nmero de PASOS requeridos por busca

Tmoda(n) (n) (eciente)

Cota Superior (peor caso) Costes de cada Instancia Coste Promedio Coste temporal Cota Inferior (mejor caso)

busca: Peor caso: O(n) Mejor caso: (1) Promedio: O(n)

0 0 Talla Nmero de PASOS requeridos por el programa raro

Cota Superior Coste Peor caso Costes Instancias Coste temporal Coste Mejor caso Cota Inferior

raro: Peor caso: O(n2) Mejor caso: (n) Promedio: O(n2)


Talla

0 0

Notaci on asint otica: algunas propiedades u tiles


Relaci on de orden entre ordenes de funciones: f (n) (f (n)) O(f (n)) O(g (n)) f (n) O(g (n)) g (n) / O(f (n)) f (n) O(g (n)) g (n) (f (n)) Orden de suma de funciones: funci on dominante
k

(fi(n) (gi(n)) 1 i k )
i=1

fi(n) ( m ax gi(n))
1ik

M as propiedades u tiles: Ferri, Albert i Mart n: Introducci o a lan` alisi i `ncia, 1998, pag. 55. diseny dalgorismes, Universitat de Vale

Propiedades u tiles para an alisis asint oticos


Regla del l mite Para dos funciones arbitrarias f y g : N R+: si l m si l m si l m f (n) R+ entonces f (n) (g (n)) n g (n)

f (n) = 0 entonces f (n) O(g (n)) pero f (n) (g (n)), y n g (n) f (n) = + entonces f (n) (g (n)) pero f (n) (g (n)) n g (n)

Por ejemplo, f (n) = log n y g (n) = relativo? f (n) log n l m = l m n g (n) n n


LHopital

(n). Cu al es su orden

2 1/n = l l m m = 0 n 1/(2 n) n n

Notaci on asint otica: m as propiedades u tiles


Algunas sumas de series Serie aritm etica: ai = ai1 + r
n

ai = n
i=1 n

a1 + an r = a1 n + n (n 1) 2 2

n+1 i = n 2 i=1
n

i=1

i2 =

1 1 n (n + 1) (n + ) 3 2

Notaci on asint otica: m as propiedades u tiles


Ordenes de funciones polin omicas c (1),
k

c R+ ck R+, ci R, 1 i < k k N+ k N+

i=0 n

cini (nk ), ik (nk+1),


i=1 n

i=1

(n i)k (nk+1),

Notaci on asint otica: otras propiedades


Ordenes de funciones exponenciales, logar tmicas, etc. n! (2n), n! O (nn)
i=1 n

log(n!) (n log n)
n

ri (rn), r R>1 1 (log n) i i >1 (1) , r R ri

i=1 n

i=1

Notaci on asint otica: jerarqu a de costes computacionales

Algunas relaciones entre ordenes usuales:


Exponenciales Polin omicas | Superlineales | Lineales | | | O(1) O(log n) O( n) O(n) O(n log n) O(n2) O(n3) O(2n) O(nn) | | | | | Lineales | | Sublineales | Logar tmicas Constantes

Notaci on asint otica: jerarqu a de costes computacionales

10

100

O(n3)
8 80

O(n2)
6

O(n)

60

O n
2

( )
O(1)

40

O(n*log(n))
20

O(log(n))

O(n)
0 10 0 5 10 15 20

0 0 2 4 6 8

sublineales, lineales y superlineales

Notaci on asint otica: jerarqu a de costes computacionales

100 1400

O(n3)
80 1200

O(2n) O(nn) O(n!) O(n3)

O(n )
60

1000 800

40

600

O(n*log(n))
400 20 200 0 0 5 10 15 20 0 2 4 6 8 10 12

O(n)
0

superlineales, polin omicas y exponenciales

Jerarqu a de costes computacionales: consecuencias pr acticas


M aximo tama no aproximado de un problema, n, que puede ser resuelto por diversos algoritmos y computadores con distintas velocidades de proceso: Coste temporal log2 n n n log2 n n2 2n 1 paso = 1 ms 1 seg 1 min 1 hora 10330 1 000 141 32 10 10210 6 104 4 896 245 16
4

1 paso = 0.1 ms (10 veces mas r apido) 1 seg 1 min 1 hora n =f (n) 10310 104 1 003 100 13
3

1010 3,6 106 2 105 1 897 22

16

10210 6 105 4 104 775 19

1010 3,6 107 1,7 106 6 000 25

17

n10 10 n 9n 3,16 n n+3

Al aumentar el tiempo de c alculo y/o la velocidad del computador, un algoritmo logar tmico incrementa enormemente la talla de los problemas abordables lineal (o n log n) consigue incrementos lineales (o casi) de las tallas manejables cuadr atico (polin omico) consigue mejoras proporcionales moderadas exponencial solo logra mejoras aditivas despreciables

Jerarqu a de costes computacionales: consecuencias pr acticas (II)


Tiempos de ejecuci on en una m aquina que ejecuta 109 pasos por segundo ( 1 GHz), en funci on del coste del algoritmo y del tama no del problema n: Talla 10 20 30 40 50 100 1000 10000 100000 1000000 log2 n 3.322 ns 4.322 ns 4.907 ns 5.322 ns 5.644 ns 6.644 ns 10 ns 13 ns 17 ns 20 ns n 10 ns 20 ns 30 ns 40 ns 50 ns 100 ns 1 s 10 s 100 s 1 ms n log2 n 33 ns 86 ns 147 ns 213 ns 282 ns 664 ns 10 s 133 s 2 ms 20 ms n2 100 ns 400 ns 900 ns 2 s 3 s 10 s 1 ms 100 ms 10 s 16.7 min n3 1 s 8 s 27 s 64 s 125 s 1 ms 1s 16.7 min 11.6 d as 31.7 a nos 2n 1 s 1 ms 1s 18.3 min 13 d as 401012 a nos

Indice

1 Introducci on

2 6

2 Consumo de recursos: costes espaciales y temporales 3 Caracterizaci on de los costes 10 27

4 Cotas del coste: casos mejor, peor y promedio

5 Notaci on asint otica: jerarqu a de costes computacionales 6 Aspectos adicionales en complejidad computacional 50

34

Otros conceptos de inter es en complejidad computacional


Complejidad espacial Concepto de posici on de memoria: espacio de almacenamiento ocupado por uno o m as datos, cuya extensi on es independiente de la talla de las instancias del problema considerado Coste espacial de un programa o algoritmo: n umero de posiciones de memoria requeridas para su ejecuci on Todos los conceptos estudiados en el an alisis de coste temporal son directamente aplicables para el coste espacial

Talla de una instancia denida por m as de un par ametro (ej. talla de una matriz de m n)