Академический Документы
Профессиональный Документы
Культура Документы
Facultad de Informática
Universidad Politécnica de Valencia
Curso 2005/2006
Tema 3:
Complejidad computacional
Índice
1 Introducción . 2
Índice
◦ 1 Introducción . 2
Introducción
Introducción
Introducción
empı́rica (experimental), o
teóricamente.
Índice
1 Introducción . 2
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:
Índice
1 Introducción . 2
Una buena caracterización 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ótico
En general, tendrı́amos un comportamiento relativo de A1, A2, A3 tal como:
Cálculo de n²: costes relativos de A1, A2, A3
A3
A1 < A2 < A3
A2 < A1 < A3
Coste temporal
A2 < A3 < A1
A3 < A2 < A1
A2
A1
0
0
Talla
Generalmente los programas sólo son útiles para resolver problemas de gran
talla (si es pequeña podrı́amos resolverlos manualmente sin dificultad)
#include <stdio.h>
#define MAXDATOS 100000
#define MAXEDAD 150
int main() /* modax.c: cálculo de la moda */
{
int i, j, n, edad, frec, maxFrec, moda, edades[MAXDATOS];
80
moda0
moda1
70 moda
60
Tiempo (segundos)
50
40
30
20
10
10000 20000 30000 40000 50000 60000 70000 80000 90000 100000
Talla (número de edades procesadas)
0.7
moda0
moda1
0.6 moda
0.5
Tiempo (segundos)
0.4
0.3
0.2
0.1
10000 20000 30000 40000 50000 60000 70000 80000 90000 100000
Talla (número de edades procesadas)
Índice
1 Introducción . 2
0
0
Talla
b w m
Tbusca (n) = 1 Tbusca (n) = n Tbusca (n) = n/2
#include <stdio.h>
#define K 64
#define maxN 1000000
n = 0;
pasos = 1;
printf("Teclear datos\n");
while ((n < maxN) && (scanf("%d", &x) != EOF)) { /* lee datos */
X[n] = x;
n++;
}
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úmero total de pasos varı́a
de manera diferente con las instancias de cada talla según ésta sea o no múltiplo de 3.
FI– UPV: 29 de noviembre de 2005 Página 3.32
PRG-3 Complejidad computacional
Cota Superior
Coste Peor caso
Costes Instancias
Coste Mejor caso
Coste temporal
Cota Inferior
0
0
Talla
Generalmente es suficiente determinar las cotas asintóticas; es decir para talla >>>
FI– UPV: 29 de noviembre de 2005 Página 3.33
PRG-3 Complejidad computacional
Índice
1 Introducción . 2
Notación asintótica
Ejemplos
t(n) = 3n + 2
t(n) = 100n + 6
t(n) = 10n2 + 4n + 2
Ejemplos
Cota Superior
Coste Peor caso
raro:
Peor caso: O(n2)
Costes Instancias
Coste Mejor caso
Coste temporal
Cota Inferior
f (n)
• si lı́m ∈ R+ entonces f (n) ∈ Θ(g(n))
n→∞ g(n)
f (n)
• si lı́m = 0 entonces f (n) ∈ O(g(n)) pero f (n) 6∈ Θ(g(n)), y
n→∞ g(n)
f (n)
• si lı́m = +∞ entonces f (n) ∈ Ω(g(n)) pero f (n) 6∈ Θ(g(n))
n→∞ g(n)
p
Por ejemplo, f (n) = log n y g(n) = (n). ¿Cuál es su orden
relativo?
n
X n+1
• i = n
i=1
2
n
X
2 1 1
• i = n (n + 1) (n + )
i=1
3 2
• c ∈ Θ (1), ∀c ∈ R+
k
X
• cini ∈ Θ (nk ), ∀ck ∈ R+, ∀ci ∈ R, 1 ≤ i < k
i=0
Xn
• ik ∈ Θ (nk+1), ∀k ∈ N+
i=1
Xn
• (n − i)k ∈ Θ (nk+1), ∀k ∈ N+
i=1
• n! ∈ Ω (2n), n! ∈ O (nn)
• log(n!) ∈ Θ (n log n)
n
X
• ri ∈ Θ (rn), ∀r ∈ R>1
i=1
n
X 1
• ∈ Θ (log n)
i=1
i
n
X i >1
• i
∈ Θ (1), ∀r ∈ R
i=1
r
Exponenciales
· · · Polinómicas |
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
10 100
O(n3)
8 80
O(n2)
6 O(n) 60
( )
4 40
O n O(n*log(n))
2 20
O(log(n))
O(n)
O(1)
0 0
0 2 4 6 8 10 0 5 10 15 20
100
1400 O(2n)
O(n3) O(nn) O(n3)
80 1200 O(n!)
O(n2)
1000
60
800
40 600
O(n*log(n))
400
20
O(n) 200
0 0
0 5 10 15 20 0 2 4 6 8 10 12
Índice
1 Introducción . 2
Complejidad espacial
Concepto de posición de memoria: espacio de almacenamiento
ocupado por uno o más datos, cuya extensión es independiente de
la talla de las instancias del problema considerado