Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comple Ji Dad
Comple Ji Dad
Estructura de Datos
ndice
3.1 Complejidad computacional y asinttica
3.2 Ejemplos de complejidad asinttica
3.3 La notacin O
3.4 Anlisis del caso mejor, peor y medio
Estructura de Datos
Complejidad computacional y
asinttica
Entrada
Algoritmo
Estructura de Datos
Salida
Complejidad computacional y
asinttica
Clculo de divisores
Descomponer en factores primos
Utilizar el Algoritmo de Euclides
Estructura de Datos
Complejidad computacional y
asinttica
Ejemplos:
Mito:
Estructura de Datos
Complejidad computacional y
asinttica
COMPLEJIDAD COMPUTACIONAL
Indica el esfuerzo que hay que realizar para aplicar un
algoritmo y lo costoso que ste resulta.
Dicho coste que se puede medir de diversas formas (espacio,
tiempo...)
Estructura de Datos
Complejidad computacional y
asinttica
Un algoritmo es ms eficiente cuanto menos complejo
sea
La eficiencia suele medirse en trminos de consumo de
recursos:
Espaciales: cantidad de memoria que un algoritmo consume o
utiliza durante su ejecucin Complejidad espacial
Temporales: tiempo que necesita el algoritmo para ejecutarse
Complejidad temporal
Otros: utilizacin de CPU, utilizacin de perifricos, tiempo y
coste de implementacin...
Estructura de Datos
Complejidad computacional y
asinttica
Objetivo: encontrar algoritmos con la menor
complejidad espacial y temporal
Menor complejidad espacial suele implicar mayor
complejidad temporal
Estructura de Datos
Complejidad computacional y
asinttica
Factores que influyen en la complejidad
Tamao del problema
Naturaleza de los datos de entrada
Recursos hardware y software
Estructura de Datos
Complejidad computacional y
asinttica
Factores que influyen en la complejidad
Tamao del problema: magnitud(es) que al
aumentar incrementan la complejidad del algoritmo.
Ejemplos:
Ordenacin de un vector: nmero de elementos
Factorizar un nmero en sus factores primos: valor del
nmero
Estructura de Datos
10
Complejidad computacional y
asinttica
Factores que influyen en la complejidad
Naturaleza de los datos de entrada: en funcin de
cules sean los datos del problema se ejecutarn o
no determinadas instrucciones de decisin y ser
distinto el nmero de iteraciones de los bucles el
problema se resolver en ms o en menos tiempo.
Ejemplo:
buscar en un vector el valor que est almacenado en la primera
celda resulta trivial en la bsqueda lineal.
Estructura de Datos
11
Complejidad computacional y
asinttica
Factores que influyen en la complejidad
Naturaleza de los datos de
entrada:
120
Tiempo de ejecucin
caso mejor
caso medio
caso peor
100
80
60
40
20
0
1000
2000
3000
4000
Tamao de Entrada
Estructura de Datos
12
Complejidad computacional y
asinttica
Enfoques para medir la complejidad de un
algoritmo:
Enfoque empricos o a posteriori
Enfoque terico o a priori.
Estructura de Datos
13
Complejidad computacional y
asinttica
Enfoque empricos o a posteriori
9000
8000
7000
Tiempo (ms)
6000
5000
4000
3000
2000
1000
0
0
Estructura de Datos
50
Tamao Entrada
100
14
Complejidad computacional y
asinttica
1.
2.
3.
Estructura de Datos
15
Complejidad computacional y
asinttica
Ventajas e inconvenientes
1.
2.
3.
4.
Estructura de Datos
16
Complejidad computacional y
asinttica
Principio de invarianza:
Dos implementaciones de un mismo algoritmo no diferirn ms que en
una constante multiplicativa.
Si f1(n) y f2(n) son los tiempos consumidos por dos implementaciones de
un mismo algoritmo, se verifica que:
c, d R,
f1(n) cf2(n)
f2(n) df1(n)
Estructura de Datos
17
Complejidad computacional y
asinttica
COMPLEJIDAD ASINTTICA
Consiste en el clculo de la complejidad temporal a
priori de un algoritmo en funcin del tamao del
problema, n, prescindiendo de factores constantes
multiplicativos y suponiendo valores de n muy
grandes
No sirve para establecer el tiempo exacto de
ejecucin, sino que permite especificar una cota
(inferior, superior o ambas) para el tiempo de
ejecucin de un algoritmo
Estructura de Datos
18
Ejemplo en pseudocdigo:
Buscar el mximo valor de un array
maximoArray(A)mximo
Entrada A array de n enteros
Salida elemento mximo de A
INICIO
maxActual A[0]
PARA i 1 HASTA n 1 HACER
SI A[i] maxActual
ENTONCES maxActual A[i]
DEVOLVER maxActual
FIN
Estructura de Datos
19
Estructura de Datos
Ejemplos:
Evaluar una
expresin
Asignar un valor a
una variable
Indexar un array
Llamar a un
mtodo
Retornar un valor
20
operaciones
2
2+n
2(n 1)
2(n 1)
2(n 1)
1
FIN
Total
Estructura de Datos
7n 1
21
22
Estructura de Datos
23
En un diagrama
logartmico, la
pendiente de la
lnea corresponde a
la tasa de
crecimiento de la
funcin
Estructura de Datos
T (n )
Lineal n
Cuadrtica n2
Cbica n3
1E+30
1E+28
1E+26
1E+24
1E+22
1E+20
1E+18
1E+16
1E+14
1E+12
1E+10
1E+8
1E+6
1E+4
1E+2
1E+0
1E+0
Cbica
Cuadrtica
Lineal
1E+2
1E+4
1E+6
1E+8
1E+10
24
factores constantes
trminos de orden
menor
T (n )
La tasa de
crecimiento no se
ve afectada por:
Ejemplos
102n + 105 es una
funcin lineal
105n2 + 108n es una
funcin cuadrtica
1E+26
1E+24
1E+22
1E+20
1E+18
1E+16
1E+14
1E+12
1E+10
1E+8
1E+6
1E+4
1E+2
1E+0
1E+0
Cuadrtica
Cuadrtica
Lineal
Lineal
1E+2
1E+4
1E+6
1E+8
1E+10
Estructura de Datos
25
La notacin O
Dadas las funciones f(n)
y g(n), se dice que f(n)
es O(g(n)) si existen
constantes positivas
c y n0 tales que
f(n) cg(n) para n n0
Ejemplo: 2n + 10 es O(n)
2n + 10 cn
(c 2) n 10
n 10/(c 2)
Elegir c = 3 y n0 = 10
Estructura de Datos
10,000
3n
2n+10
1,000
100
10
1
1
10
100
1,000
26
La notacin O
Ejemplo:
5n3 + 3n2 +1 O(n3)
tomando n0= 3, c= 6 tenemos que:
5n3 + 3n2 +1 6n3
Nota: Tambin pertenecera a O(n4), pero no a O(n2).
Estructura de Datos
27
La notacin O
Existen diferentes notaciones para la complejidad
asinttica
Una de ellas es la notacin O, que permite especificar
la cota superior de la ejecucin de un algoritmo
La sentencia f(n) es O(g(n)) significa que la tasa de
crecimiento de f(n) no es mayor que la tasa de
crecimiento de g(n)
La notacin O sirve para clasificar las funciones de
acuerdo con su tasa de crecimiento
Estructura de Datos
28
La notacin O
Ejemplo: la funcin n2 1,000,000
no es O(n)
n2 cn
nc
La desigualdad
anterior no puede
satisfacerse porque c
debe ser una
constante
n^2
100n
100,000
10n
n
10,000
1,000
100
10
1
1
Estructura de Datos
10
100
1,000
29
La notacin O
La notacin O proporciona una cota superior para la
tasa de crecimiento de una funcin
f(n) es O(g(n))
g(n) es O(f(n))
g(n) crece ms
No
f(n) crece ms
No
Igual crecimiento
Estructura de Datos
30
La notacin O
Sea {g(n)} la clase (conjunto) de funciones que son
O(g(n))
Se tiene:
{n} {n2} {n3} {n4} {n5}
donde la inclusin es estricta
{n3}
{n2}
{n}
Estructura de Datos
31
La notacin O
Propiedades de O(f(n)):
Reflexiva: f(n)O(f(n))
Transitiva: si f(n) O(g(n)) y g(n) O(h(n)),
entonces f(n) O(h(n))
Eliminacin de constantes: O(cf(n)) = O(f(n)),
para todo c.
O(logan) = O(logbn), para todo a y b.
Suma de rdenes: O(f(n)+g(n)) =
O(max(f(n),g(n))
Producto de rdenes: O(f(n))O(g(n)) = O(f(n)
g(n))
Estructura de Datos
32
La notacin O
O(1)
Constante
O(log n)
Logartmica
Bsqueda binaria
O(n)
Lineal
Bsqueda lineal
O(nlog n)
Casi lineal
Quick-sort
O(n2)
Cuadrtica
Algoritmo de la burbuja
O(n3)
Cbica
Producto de matrices
O(nk) k>3
Polinmica
O(kn) k>1
Exponencial
O(n!)
Factorial
Estructura de Datos
Algunos algoritmos de
grafos
Eficiente
Tratable
Intratable
33
La notacin O
Jerarqua de rdenes de complejidad
1E+30
1E+27
1E+24
1E+21
T (n )
1E+18
Cbica
Cuadrtica
Lineal
1E+15
1E+12
1E+9
1E+6
1E+3
1E+0
1E+0
1E+2
1E+4
1E+6
1E+8
1E+10
Estructura de Datos
34
La notacin O
Estructura de Datos
35
La notacin O
El anlisis asinttico de algoritmos determina el tiempo
de ejecucin en notacin O
Para realizar el anlisis asinttico
Buscar el nmero de operaciones primitivas ejecutadas en el
peor de los casos como una funcin del tamao de la entrada
Expresar esta funcin con la notacin O
Ejemplo:
Se sabe que el algoritmo maximoArray ejecuta como mucho
7n 1 operaciones primitivas
Se dice que maximoArray ejecuta en un tiempo O(n)
Estructura de Datos
36
La notacin O
Reglas:
Estructura de Datos
37
La notacin O
Reglas prcticas:
Estructura de Datos
38
La notacin O
Reglas prcticas:
Estructura de Datos
39
La notacin O
Ejemplo de anlisis asinttico para
dos algoritmos de clculo de medias
prefijas
35
X
A
30
25
20
15
10
5
Estructura de Datos
0
1
2 3
5 6
40
La notacin O
Medias prefijas (Cuadrtico)
mediasPrefijas1(vector,n) vector
INICIO
A nuevo Array de n enteros
i0
MIENTRAS (i < n)
s X[0]
j1
MIENTRAS (j <= i)
s s + X[j]
jj+1
FIN-MIENTRAS
A[i] s / (i + 1)
ii+1
FIN-MIENTRAS
DEVOLVER A
FIN
OPERACIONES
n
1
n+1
n
n
1,2,3,4,,n
1,2,3,,n-1
1,2,3,,n-1
n
n
n
1
41
La notacin O
Medias prefijas (Lineal)
mediasPrefijas2(vector,n) vector
INICIO
A nuevo Array de n enteros
s0
i0
MIENTRAS (i < n)
s s + X[j]
A[i] s / (i + 1)
ii+1
FIN-MIENTRAS
DEVOLVER A
FIN
OPERACIONES
n
1
1
n+1
n
n
n
n
1
Estructura de Datos
42
Estructura de Datos
43
Estructura de Datos
44
Estructura de Datos
45
Estructura de Datos
46