Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Eficiencia de
Algoritmos
03
/0
1
8/
Cgloria Calderon1
Conceptos Bsicos
Informalmente un algoritmo se define como
cualquier procedimiento computacional bien
definido que toma algn valor como entrada y
produce un valor de salida
Un algoritmo es una secuencia de pasos finita,
lgica y secuencial que transforma los datos de
entrada en datos de salida.
0
3/
/
08
16
Conceptos Bsicos
Estos son analizados para predecir los recursos que
consumir (memoria, medios de comunicacin, y el
ms importante es el tiempo que tomar en
ejecutarse el programa que tiene implementado
nuestro algoritmo.)
Dentro del anlisis de algoritmos se concentran
principalmente en determinar el peor de los casos
para el cual se ejecutar el algoritmo.
3/
/
08
16
Conceptos Bsicos
El anlisis de algoritmos proporciona los mtodos
necesarios para poder comparar distintos
algoritmos que resuelven un mismo problema.
Un algoritmo es eficiente si administra en forma
correcta los recursos.
3/
/
08
16
3/
/
08
16
0
3/
Tipos de Algoritmos
Fuerza Bruta:
Buscan una solucin ptima a travs de una bsqueda
exhaustiva.
3/
/
08
16
Tipos de Algoritmos
Heursticos: Producen con rapidez soluciones buenas, pero
no necesariamente son ptimas.
Su funcionamiento se basa en la experiencia, en un conocimiento
experto, en una informacin externa al problema que, proporciona
soluciones para una situacin que se est considerando.
3/
/
08
16
Tipos de Algoritmos
ALGORITMO HEURISTICO:
VENDEDOR VIAJERO
Ejemplo Heursticos
A
3
5
1
D
7
3
21
2
35
CAMINO OPTIMO, SIN PASAR MS DE UNA VEZ POR CADA CIUDAD:
A B8/16 E C D F A = 33
0
0
3/
Tipos de Algoritmos
Avidos:
Un algoritmo vido inicia con una solucin a un pequeo
subproblema y construye una solucin a un problema mayor .
Es una tcnica algortmica para hallar soluciones a diferentes
Problemas.
Toma decisiones de corto alcance, basadas en informacin
inmediatamente disponible.
Los algoritmos vidos completan soluciones parciales para dar,
al final, la solucin completa, ordenando las alternativas y
seleccionando la mejor.
3/
/
08
16
0
Nunca
reconsideran nuevas decisiones (nunca vuelven atrs).
10
Tipos de Algoritmos
ALGORITMOS AVIDOS:
SERVIDOR DE IMPRESIN
1 Servidor de Impresin con 3 clientes, cuyos tiempos de espera son:
CLIENTE A
:5
CLIENTE B
: 10
CLIENTE C
:3
COMBINACIONES POSIBLES: 6
TIEMPO DE ESPERA
0
3/
8/
16
ORDEN
TOTAL
A-B-C
5+10
20
A-C-B
5+3
13
B-A-C
10
10+5
25
B-C-A
10
10+3
23
C-A-B
5+3
11
C-B-A
0 UNIDAD 3I DIAGRAMA
3+10DE FLUJO
16
11
Caractersticas de un Algoritmo
Bien definido
No ambiguo
Finito (siempre termina)
Ser Eficiente
Ser legible
Claridad: programacin estructurada
Correctitud: satisfacer especificacin
Cero y ms entradas y una o ms salidas.
3/
/
08
16
12
EFICIENCIA DE ALGORITMOS
Anlisis de un algoritmos
Evaluacin de los recursos que un algoritmo requiere.
Esto se refiere:
La cantidad de memoria que requiere
3/
/
08
16
13
EFICIENCIA DE ALGORITMOS
La eficiencia de los algoritmos
Criterio empresarial: Maximizar la eficiencia.
Eficiencia: Relacin entre los recursos consumidos y los
productos conseguidos.
Recursos consumidos:
Tiempo de ejecucin.
Memoria principal.
Entradas/salidas a disco.
Comunicaciones, procesadores,...
3/
/
08
16
14
EFICIENCIA DE ALGORITMOS
Cmo decidir cul de los algoritmos es preferible?
- Enfoque emprico:
Programar las tcnicas y probarlas sobre diferentes
instancias con ayuda del computador.
- Enfoque terico:
Determinar matemticamente la cantidad de
recursos necesitados por cada algoritmo como una
funcin del tamao de las instancias consideradas.
Los6 recursos de mayor inters son el tiempo
/1
15
08
/
computacional
y
el
espacio
de
memoria.
03
EFICIENCIA DE ALGORITMOS
Cmo decidir cul de los algoritmos es preferible?
Enfoque hbrido:
La forma de la funcin es determinada
tericamente y los parmetros son determinados
empricamente.
3/
/
08
16
16
EFICIENCIA DE ALGORITMOS
3/
/
08
16
17
EFICIENCIA DE ALGORITMOS
Definicin de Eficiencia
Tiempo de ejecucin de un algoritmo en funcin del
tamao de su entrada.
A la eficiencia de un algoritmo tambin se le denomina
coste, rendimiento o complejidad del algoritmo.
3/
/
08
16
18
EFICIENCIA DE ALGORITMOS
Medir la eficiencia de un Algoritmo es medir la
cantidad de recursos necesarios para su ejecucin, para
poder compararlo con otros algoritmos.
La eficiencia importa?
3/
/
08
Program
a
Consum
o
N=1.000
Bytes
Tiempo
A1
Log2n
=10
10
10 seg
A2
1.000
1kb
16 mins
A3
n2
1.000.000
1mb
11 dias
16
19
EFICIENCIA DE ALGORITMOS
Multiplicado por 1000 el tamao de datos
3/
/
08
Bytes
Tiempo
A1
Log2n
=20
20
20 seg
A2
1.000.000
1mb
11 das
A3
n2
1.012
1000
Gb
30.000
aos
16
20
COMPLEJIDAD DE ALGORITMOS
Complejidad en algoritmos:
Se define como la medida del tiempo de ejecucin de un
algoritmo.
Se representa como una tasa de crecimiento de la cantidad
de
datos de entrada.
Depende de varios factores:
Los datos de entrada del programa. (Cantidad, su
disposicin, etc.)
La calidad del cdigo generado por el compilador.
La naturaleza y rapidez de las instrucciones empleados por la
mquina
y la propia mquina.
6
1
/
21
UNIDAD I DIAGRAMA DE FLUJO
08
/
La propia
complejidad
del
algoritmo
base
del
programa.
03
COMPLEJIDAD DE ALGORITMOS
Complejidad en algoritmos:
Por ejemplo:
Ordenar tres nmeros tomar distinto tiempo que ordenar 1000, y en
general, el tiempo tomado por un algoritmo crece con el tamao de
la entrada.
Al algoritmo se le asocia un nmero n llamado tamao del problema,
que es una medida de la cantidad de datos de entrada.
3/
/
08
16
22
COMPLEJIDAD DE ALGORITMOS
T (n) = Tiempo de ejecucin de un algoritmo en funcin de
n
datos de entrada.
Las unidades de T(n) se dejan sin especificar, pero se puede
considerar a T(n) como el nmero de instrucciones
ejecutadas
en un computador ideal, y es lo que se entiende por
complejidad.
No se puede determinar el tiempo de ejecucin en
segundos
de un programa, a menos que se conozca cul es la
mquina
y el compilador
3/
/
08
16
23
COMPLEJIDAD COMPUTACIONAL
Para comparar algoritmos se puede utilizar una
medida
del grado de dificultad del algoritmo: la complejidad
computacional
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...)
3/
/
08
16
24
COMPLEJIDAD COMPUTACIONAL
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...
0
3/
/
08
16
25
COMPLEJIDAD TEMPORAL/ESPACIAL
Complejidad Temporal Asinttica:
3/
/
08
16
26
COMPLEJIDAD COMPUTACIONAL
Objetivo:
Encontrar algoritmos con la menor complejidad
espacial y temporal
Menor complejidad espacial suele implicar mayor
complejidad temporal
Nos centraremos en complejidad temporal por
ser el recurso ms crtico
3/
/
08
16
27
COMPLEJIDAD COMPUTACIONAL
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
3/
/
08
16
28
COMPLEJIDAD COMPUTACIONAL
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.
3/
/
08
16
29
COMPLEJIDAD COMPUTACIONAL
Factores que influyen en la complejidad
Naturaleza de los datos
de entrada:
Caso mejor: los datos de
entrada consumen el mnimo
Caso peor: los datos de
entrada consumen el mximo
(cota superior).
Caso promedio: los datos
se distribuyen de forma
aleatoria. Difcil de calcular.
3/
/
08
16
30
COMPLEJIDAD COMPUTACIONAL
Enfoques para medir la complejidad de un
algoritmo:
Enfoque empricos o a posteriori
Enfoque terico o a priori.
3/
/
08
16
31
COMPLEJIDAD COMPUTACIONAL
Enfoque empricos o a posteriori
1. Escribir un programa que
implemente el algoritmo, por
ejemplo en visual.
2. Ejecutar el programa con
entradas de tamao y
composicin variadas
3. Usar un mtodo para
obtener una medida exacta
del tiempo de ejecucin real
4. Trazar
6
los resultados
/1
0
0
3/
32
COMPLEJIDAD COMPUTACIONAL
Enfoque tericos o a priori
1. Utilizar una descripcin de alto nivel del
algoritmo (ejemplo en pseudocdigo)
2. Determinar, matemticamente, la cantidad de
recursos necesarios para ejecutar el algoritmo
3. Obtener una funcin genrica f(n) que permita
hacer predicciones sobre la utilizacin de
recursos, siendo n el tamao del problema
3/
/
08
16
33
COMPLEJIDAD COMPUTACIONAL
Ventajas e inconvenientes
1. El estudio a posteriori requiere la implementacin del algoritmo (mayor
coste). El estudio a priori solo requiere de una descripcin de alto nivel
(pseudocdigo).
2. En el estudio a posteriori no se tiene la seguridad de los recursos que
realmente se van a consumir si varan las entradas. El estudio a priori
es independiente de los datos de entrada.
3. En el estudio a posteriori, los resultados slo sern vlidos para unas
determinadas condiciones de ejecucin. Es difcil extrapolar los
resultados si se producen cambios en el hardware, sistema operativo,
lenguaje utilizado, etc.
3/
/
08
16
34
COMPLEJIDAD COMPUTACIONAL
Ventajas e inconvenientes
4.- El estudio a priori es independiente de las condiciones
de ejecucin.
5.- El estudio a posteriori permite hacer una evaluacin
experimental de los recursos consumidos que no es
posible en el estudio a priori.
3/
/
08
16
35
COMPLEJIDAD COMPUTACIONAL
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)
El estudio a posteriori trata con programas. El estudio a priori trata con algoritmos
3/
/
08
16
36
COMPLEJIDAD COMPUTACIONAL
3/
/
08
16
37
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
0
3/
/
08
16
38
3/
/
08
16
39
3/
/
08
16
Ejemplos:
Evaluar una
expresin
Asignar un valor a
una variable
Indexar un array
Llamar a un
mtodo
Retornar un valor
40
maximoArray(A)
INICIO
maxActual A[0]
PARA i 1 HASTA n 1 HACER
SI A[ i] maxActual
ENTONCES maxActual A[i]
{ incrementar contador i }
DEVOLVER maxActual
operaciones
2
2+n
2(n 1)
2(n 1)
2(n 1)
1
FIN
3/
/
08
16
Total
7n 1
41
42
3/
/
08
16
43
En un diagrama
logartmico, la
pendiente de la lnea
corresponde a la tasa
de crecimiento de la
funcin
0
3/
/
08
16
44
Ejemplos
102n + 105 es una funcin
lineal
105n2 + 108n es una
funcin cuadrtica
3/
/
08
16
45
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
0
3/
/
08
16
46
NOTACIN O (Mayscula)
Ejemplo2: Graficar
T(n) = (n+1)2 es O(n2)
n2+2n+1 <= c*n2
n >= n0
c=2
Orden n2 es O(n2)
Ejemplo3: Graficar
T(n) = 3n3 + 2n2 es O(n3).
Comprobacin:
n0 = 06 y c = 5, entonces para n>= 0; 3n 3 + 2n2 <= 5n3.
0
0
3/
8/
47
LA NOTACIN O
Ejercicio:
5n3 + 3n2 +1 O(n3)
3/
/
08
16
48
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
0
3/
/
08
16
49
LA NOTACIN O
Ejemplo: la funcin
n2 no es O(n)
n2 cn
n c
La desigualdad
anterior no puede
satisfacerse porque c
debe ser una
constante
3/
/
08
16
50
Propiedades de la notacin O
1.- Los factores constantes pueden ser ignorados
(kf)(n) es O(f(n)) para cualquier k
Ejemplo:
T(n)=5n2 es 0(n2)
2. La razn de crecimiento de una suma est dada por el trmino cuya razn
de crecimiento es mayor
Si f es O(g) y g es O(h) entonces f es O(h)
Ejemplo:
O(n2) + O(n3) = O(n3)
3. Si f crece ms rpido que g, que crece ms rpido que h, entonces f crece
ms rpido que h.
4. Potencias
mayores de n crecen ms rpido que potencias menores
16
/
UNIDAD
I DIAGRAMA DE FLUJO
r
s
s
r
08
Si O 0<=
3/ r < s, entonces n es O(n ) y n no es O(n )
51
Propiedades de la notacin O
5. La razn de crecimiento de un polinomio est dado por el trmino mayor,
(ignorando factores constantes)
Si p(n) es un polinomio de grado d, entonces p(n) es O(nd)
Ejemplo:
5n3 + 2n2 + 3n + 2 = O(n3)
6. La razn de crecimiento de un producto est dado por la multiplicacin de
la razn de crecimiento.
Si f es O(n) y g es O(k). entonces fg es O(nk)
Ejemplo:
O(n) *O(n) = O(n2)
7. Las funciones exponenciales crecen ms rpido que las potencias.
Si b > k, entonces nk es O(bn) y bn no es 0(nk)
6
8. Las funciones
logaritmo crecen ms lento queUNIDAD
las potencias
/1
I DIAGRAMA DE FLUJO
8
0
/
3
k
0 0. entonces Iogn es O(n )
Si k >
52
Propiedades de la notacin O
9. Todas las funciones logaritmo crecen a la misma razn.
Si b > 1 y c > 1. Entonces logbn es O (logcn)
10. La suma de las primeras n r-simas potencias crecen a la misma razn
que la (r+1) potencia de n
3/
/
08
16
53
LA NOTACIN O
Jerarqua de rdenes de complejidad
3/
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
/
08
16
Algunos algoritmos de
grafos
Eficiente
Tratable
Intratable
54
CLASIFICACIN DE ALGORITMOS
Es posible clasificar a los algoritmos de acuerdo con estimaciones
aproximadas del tiempo de ejecucin. El parmetro de inters
primario es el nmero de elementos a procesar (n).
La mayora de los algoritmos que se analizarn tienen un tiempo
de ejecucin proporcional a:
3/
/
08
16
55
CLASIFICACIN DE ALGORITMOS
3/
/
08
16
56
ORDEN DE COMPLEJIDAD DE
ALGORITMOS
El orden de complejidad de un algoritmo en cuanto a tiempo de
ejecucin es una expresin matemtica que indica cmo crece
el tiempo de ejecucin cuando crece el tamao del problema
que resuelve el algoritmo.
3/
/
08
16
57
ORDEN DE COMPLEJIDAD DE
ALGORITMOS
3/
/
08
16
58
ORDEN DE COMPLEJIDAD DE
ALGORITMOS
Ejemplo:
El tiempo de ejecucin de un algoritmo de ordenacin
de elementos puede ser muy distinto segn el arreglo contenga
datos ya ordenados, o casi ordenados, o no.
En general, cuando se hable de coste asinttico, se refiere al
caso de contenido de datos ms desfavorable, es decir el caso
peor.
3/
/
08
16
59
Velocidad de Crecimiento
3/
/
08
16
60
Tamao mximo
de problema
para 103 seg.
Tamao mximo de
problema para
104 seg.
Incremento en el
tamao
mximo del
problema
100n
10
100
10.0
1000%
5n2
14
45
3.2
320%
N3/2
12
27
2.3
230%
2n
10
13
1.3
30%
Tiempo de
Ejecucin
T(n)
3/
/
08
16
61
lg n
n lg n
n2
n3
2n
3n
n!
16
64
16
81
24
24
64
512
256
6.561
40.320
16
64
256
4.096
65.536
43.046.721
20.922.789.888.000
32
160
1.024
32.768
4.294.967.296
64
384
4.096
262.144
128
896
16.38
4
2.097.152
**
3/
/
08
16
62
EFICIENCIA DE ALGORITMOS
Anlisis del mejor caso, peor caso y caso
promedio
Para propsitos de comparacin del rendimiento
de diferentes algoritmos, se requiere de una
medida de rendimiento de algoritmos; la medida
ms ampliamente aceptada es el tiempo que el
algoritmo en cuestin consume antes de producir
la solucin final.
3/
/
08
16
63
EFICIENCIA DE ALGORITMOS
Anlisis del peor caso:
Es apropiado para un algoritmo cuyo tiempo de
respuesta es crtico (control de una planta
nuclear).
Si un algoritmo ser usado muchas veces
sobre diferentes instancias, puede ser ms
importante conocer el tiempo de ejecucin
promedio en instancias de tamao n.
3/
/
08
16
64
3/
/
08
16
65
3/
/
08
16
66
3/
/
08
16
67
3/
/
08
16
68
EJEMPLO:
Se tiene una lista A de n elementos A1, A2, A3, , A n.
Ordenar significa permutar estos elementos de tal forma que
los mismos queden de acuerdo con un orden preestablecido:
Ascendente A1 <= A2 <= A3 <= A n
Descendente A1 >= A2 >= A3 >= A n
Caso peor: que el vector est ordenado en sentido inverso.
Caso mejor: que el vector est ordenado.
Caso medio: cuando el vector est ordenado en forma aleatoria.
3/
/
08
16
69
for i := 1 to n-1 do
(2)
(3)
(4)
temp. := A[j-1];
(5)
A[j-1] := A[j];
(6)
A[j] := temp;
End
End; {burbuja}
3/
/
08
16
70
esta = no
2.-
I=1
3.-
4.-
fin
3/
/
08
16
71
3/
/
08
16
72
3/
/
08
16
73
3/
/
08
16
74
3/
/
08
16
75
3/
/
08
16
76
Ejemplo.
Cuntos recursos de tiempo y memoria consume el
siguiente algoritmo sencillo?
i:= 0
repetir
i:= i + 1
hasta a[i] = x
Respuesta: Depende.
De qu depende?
De lo que valga n y x, de lo que haya en a, de los
tipos de datos, de la mquina...
Mejor caso. Se encuentra x en la 1 posicin:
6
Peor
caso. No se encuentra x:UNIDAD I DIAGRAMA DE FLUJO
/1
8
0
/
03 Caso medio. Se encuentra x con probabilidad P:
77
3/
/
08
16
78
3/
/
08
16
79
3/
/
08
16
81
EJEMPLOS CICLOS
1)
FOR i : 1 to k DO
A lg o_de_O( 1 )
2)
END;
FOR i : 1 to n DO
A lg o_de_O( 1 )
END;
3/
/
08
16
k * O(1) O(1)
n * O(1) O(n)
82
EJERCICIO
Calcule el orden de complejidad de
T1( n): lnea 1
T2( n): lneas2-4 y
T3( n): lneas 5-6 y
el orden del algoritmo.
[1] readln(n);
[2] for i:=1 to n {
[3] for j:=1 to n
[4] A[i,j]:= 0; }
[5] for i:=1 to n do
[6] A[i,i]:=1
Respuesta:
3/
/
08
16
83
EJEMPLO
a) x a + b
(ts)=O(1)
b) para i 1 hasta n
xa+b
ts=O (n)
c) para i 1 hasta n
para i 1 hasta n
xa+b
(ts)=n2
3/
/
08
16
84
EJEMPLO
(1)for i:=1 to n do
(3)
end;
algo_de_O(1)
3/
/
08
16
85
EJEMPLO
c:=1
while (c< n) do
Algo_de_O(1);
n<= 2k /log
n<=k log 2
c:=2 * c;
la complejidad es O(log n)
0
3/
/
08
16
86