Você está na página 1de 20

Estrategias

de programacin y estructuras de datos


Grado en Ingeniera Inform8ca
Grado en Tecnologas de la Informacin
Departamento de Lenguajes y Sistemas inform6cos

3
Anlisis de la eciencia
de los algoritmos
Coste asintDco temporal
Javier Vlez Reyes Jos Ignacio Mayorga Toledano
jvelez@lsi.uned.es nmayorga@lsi.uned.es
Departamento de Lenguajes Y Sistemas InformDcos
UNED
Anlisis de la eciencia de los algoritmos
ndice

ndice
Introduccin
Qu es la eficiencia de los algoritmos?
Criterios de clasificacin del anlisis de la eficiencia
Mtricas de anlisis de la eficiencia de los algoritmos
Medida de la eficiencia de los algoritmos
Cmo se mide la eficiencia de los algoritmos?
Medida asinttica de la eficiencia
rdenes de complejidad
Bibliografa

3-2 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Obje6vos generales

Obje8vos
Aprender qu es la eficiencia de los algoritmos
Aprender los criterios en torno a los cuales se puede clasificar la eficiencia
Conocer las principales mtricas de medida de la eficiencia
Aprender cmo se puede calcular el coste de un algoritmo bajo 3 supuestos
Medida del tiempo de ejecucin
Medida asinttica O
Hiptesis de caso peor
Aprender cmo se mide la eficiencia algortmica de
Algoritmos recursivos
Algoritmos iterativos
Adquirir una visin crtica sobre la complejidad algortmica
Adquirir herramientas para seleccionar el mejor algoritmo para un problema
Adquirir herramientas para seleccionar la estructura ms eficiente para un problema

3-3 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Introduccin

Qu es la eciencia de los algoritmos?


El anlisis de la eciencia de los algoritmos permite establecer criterios compara6vos y
clasicatorios entre algoritmos que ayudan a entender cmo se comportan y escalan stos
en cuanto a la consumicin de recursos 6empo y memoria fundamentalmente con
respecto a la magnitud de sus parmetros de entrada

Denicin
El anlisis de la eciencia de los algoritmos es un estudio terico, formal, compara6vo e
independiente de la implementacin que 6ene por objeto clasicar a los algoritmos en
familias de complejidad de acuerdo a cmo se comportan segn crece la magnitud de
sus parmetros de entrada

Estudio terico Independencia

Estudio formal De recursos de mquina


Terico Del lenguaje de programacin
Comparativo De aspectos constantes
Clasificatorio De aspectos de escala

3-4 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Introduccin

Qu es la eciencia de los algoritmos?


El anlisis de la eciencia de los algoritmos permite establecer criterios compara6vos y
clasicatorios entre algoritmos que ayudan a entender cmo se comportan y escalan stos
en cuanto a la consumicin de recursos 6empo y memoria fundamentalmente con
respecto a la magnitud de sus parmetros de entrada
boolean repetidos (T[] v) {
boolean ordenar (T[] v) { boolean repetidos = false;
int temp; int i = 0;
for (int i = 1; i < v.length; i++) while (!repetidos && i < v.length)
for (int k = v.length - 1; k >= i; k--) repetidos = contiene (v, i+1, v[i]);
if (v[k] < v[k-1]) { return repetidos;
temp = v[k]; }
v[k] = v[k-1];
v[k-1]= temp; boolean contiene (T[] v, int p, T e) {

} int i = p;

} boolean found = false


while (!found && i <= v.length) {
tiempo
<
found = (v[i] == e);
i = i + 1;
}
return found; }

3-5 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Introduccin

Qu es la eciencia de los algoritmos?


El anlisis de la eciencia de los algoritmos permite establecer criterios compara6vos y
clasicatorios entre algoritmos que ayudan a entender cmo se comportan y escalan stos
en cuanto a la consumicin de recursos 6empo y memoria fundamentalmente con
respecto a la magnitud de sus parmetros de entrada

Criterios de medida de la eciencia


I. Segn el tipo de recurso Espacial
La eficiencia de los algoritmos puede medirse Se analiza la relacin funcional existente entre
de acuerdo a la consumicin de diferentes el tamao del problema expresado en trminos
recursos. La medida de la eficiencia de un de sus parmetros de entrada y la consumicin
del recurso memoria
Criterios de medida

algoritmo puede ser distinta segn el recurso

II. Segn el tipo de comportamiento


} Foco de
Temporal
atencin
Fijado un tipo de recurso, la eficiencia de los Se analiza la relacin funcional existente entre
algoritmos puede medirse bajo distintos el tamao del problema expresado en trminos
supuestos en los que se supone se encuentra de sus parmetros de entrada y la consumicin
el problema medio a analizar del recurso tiempo de cmputo
II. Segn la mtrica utilizada Otros
Fijado un tipo de recurso y un determinado
supuesto, debe escogerse una mtrica Se analiza la relacin funcional existente entre
comparativa que permita clasificar a los el tamao del problema expresado en trminos
algoritmos en familias con un comportamiento de sus parmetros de entrada y la consumicin
interno similar de otros recursos como perifricos empleados,
ancho de banda, consumo elctrico, etc.

3-6 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Introduccin

Qu es la eciencia de los algoritmos?


El anlisis de la eciencia de los algoritmos permite establecer criterios compara6vos y
clasicatorios entre algoritmos que ayudan a entender cmo se comportan y escalan stos
en cuanto a la consumicin de recursos 6empo y memoria fundamentalmente con
respecto a la magnitud de sus parmetros de entrada

Criterios de medida de la eciencia


} Foco de
I. Segn el tipo de recurso Peor caso
atencin
La eficiencia de los algoritmos puede medirse Se estima la mxima cantidad de recursos que
de acuerdo a la consumicin de diferentes un algoritmo puede necesitar consumir para su
recursos. El tipo de recurso establece una ejecucin en funcin de su entrada. Supone
una cota superior de estos recursos
Criterios de medida

particin del espacio de algoritmos distinta

II. Segn el tipo de comportamiento Caso medio


Fijado un tipo de recurso, la eficiencia de los Se estima el comportamiento a partir de una
algoritmos puede medirse bajo distintos hiptesis sobre la distribucin estadstica de los
supuestos en los que se supone se encuentra datos de entrada que se supone ms probable.
el problema medio a analizar Tambin llamado anlisis probabilstico
II. Segn la mtrica utilizada Mejor caso
Fijado un tipo de recurso y un determinado
supuesto, debe escogerse una mtrica Se estiman los recursos necesarios para su
comparativa que permita clasificar a los ejecucin en condiciones ptimas en funcin de
algoritmos en familias con un comportamiento la entrada. Esta medida afecta al ejemplar ms
interno similar sencillo del problema

3-7 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Introduccin

Qu es la eciencia de los algoritmos?


El anlisis de la eciencia de los algoritmos permite establecer criterios compara6vos y
clasicatorios entre algoritmos que ayudan a entender cmo se comportan y escalan stos
en cuanto a la consumicin de recursos 6empo y memoria fundamentalmente con
respecto a la magnitud de sus parmetros de entrada

Criterios de medida de la eciencia


} Foco de
I. Segn el tipo de recurso Cota superior. O
atencin
La eficiencia de los algoritmos puede medirse Se mide el coste asinttico de la ejecucin de
de acuerdo a la consumicin de diferentes un algoritmo de acuerdo a una cota superior. Es
recursos. El tipo de recurso establece una decir, la ejecucin nunca, a partir de cierto
valor, sobrepasar la cota de coste establecida
Criterios de medida

particin del espacio de algoritmos distinta

II. Segn el tipo de comportamiento Cota inferior.


Fijado un tipo de recurso, la eficiencia de los Se mide el coste asinttico de la ejecucin de
algoritmos puede medirse bajo distintos un algoritmo de acuerdo a una cota inferior. Es
supuestos en los que se supone se encuentra decir, la ejecucin nunca, a partir de cierto
el problema medio a analizar valor, ser menor que la cota establecida
II. Segn la mtrica utilizada Cota exacta.
Fijado un tipo de recurso y un determinado
supuesto, debe escogerse una mtrica Se mide el coste asinttico de la ejecucin de
comparativa que permita clasificar a los un algoritmo de acuerdo a una cota resultante
algoritmos en familias con un comportamiento de la interseccin entre O y . Es decir, la
interno similar ejecucin crece al ritmo de la cota establecida

3-8 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Introduccin

Qu es la eciencia de los algoritmos?


El anlisis de la eciencia de los algoritmos permite establecer criterios compara6vos y
clasicatorios entre algoritmos que ayudan a entender cmo se comportan y escalan stos
en cuanto a la consumicin de recursos 6empo y memoria fundamentalmente con
respecto a la magnitud de sus parmetros de entrada

Mtricas de anlisis de la eciencia de los algoritmos

Cota superior. O Cota inferior. Cota exacta.


Si g(n) es la funcin de coste de un Si g(n) es la funcin de coste de un Si g(n) es la funcin de coste de un
algoritmo, se dice que g(n) est en algoritmo, se dice que g(n) est en algoritmo, se dice que g(n) est en
O(f(n)) si a partir de un cierto punto (f(n)) si a partir de un cierto punto (f(n)) si crece de la misma forma (al
crece, a lo sumo, menos rpido que crece ms rpido que f(n). Es decir, mismo ritmo) que f(n)
f(n). Es decir, la grfica de g est por la grfica de g est por encima de la
debajo de la de f de f)

3-9 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de los algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Medida asint8ca de la eciencia


Bsqueda de un elemento en un vector
Si hacemos medidas expe-
rimentales sobre sucesivas Tamao Tiempo medido Tiempo de ejecucin
ejecuciones de un algorit-
mo y en cada ejecucin n A * n + B t
duplicamos el tamao del
problema, observamos que 2n A * 2n + B 2t
el 6empo de ejecucin 3n A * 3n + B 3t O (n)
tambin se duplica. En ese
caso se puede decir que el ... ... ...
c o s t e a s i n t 6 c o d e l kn A * kn + B kt
algoritmo es lineal
El tamao del problema es proporcional al nmero de elementos que
contiene el vector. Sin embargo el tiempo de ejecucin no se ve
afectado por constantes multiplicativas o sumativas ya que el coste
temporal se duplica al duplicar el tamao del problema

3 - 10 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de la algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior
Hiperexponencial. O (nn)
Ordenes de eciencia Factorial. O (n!)
Exponencial de grado k. O (kn)
El anlisis asint6co nos permite ...
clasicar el espacio de algoritmos en Exponencial. O (2n)
dis6ntas familias que se corresponden Polinmica de grado k. O (nk)
con rdenes de complejidad diferentes ...
Cbica. O (n3)
int factorial (int n) {
Cuadrtica. O (n2)
if (n == 0) return 1;
Cuasilineal. O (n log n)
else return n * factorial (n - 1);
Lineal. O (n)
}
Cuadrtica inversa. O (n)
Logartmica. O (log n)

Constante. O (1)

3 - 11 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de la algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Ordenes de eciencia
C a d a o r d e n d e e c i e n c i a
representa un nivel de crecimiento
con respecto al tamao del
problema. En la grca adjunta
p u e d e v e r s e l a r e l a c i n
compara6va de los niveles de
crecimiento de los primeros
rdenes de eciencia anteriores

3 - 12 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de la algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Ordenes de eciencia
C a d a o r d e n d e e c i e n c i a
representa un nivel de crecimiento
con respecto al tamao del
problema. En la grca adjunta
p u e d e v e r s e l a r e l a c i n
compara6va de los niveles de
crecimiento de los rdenes de
eciencia siguientes a n2

3 - 13 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de los algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Algoritmos recursivos
El clculo del coste temporal de un algoritmo recursivo se expresa en trminos del coste
de los casos base y los casos de recursin del mismo. Para ilustrar cmo se procede
consideremos la funcin del clculo de un nmero factorial en su versin recursiva.
Entonces, si u6lizamos T(n) para representar el coste de computar la ejecucin con
tamao n
C1 si n == 0 Coste caso base
int factorial (int n) {
if (n == 0) return 1; T (n) =
else return n * factorial (n - 1); T (n-1) + C2 si n > 0 Coste caso recurrente
}

Resolucin para factorial (5):


Dado que el coste temporal
T(5) = T(4) + C2 = T(3) + C2 + C2 = T(2) + C2 + C2 + C2 = T(1) + C2 + C2 + C2 + C2 resulta linealmente propor-
= T(0) + C2 + C2 + C2 + C2 + C2 = C1 + C2 + C2 + C2 + C2 + C2 = C1 + 5 * C2 cional al tamao del proble-
} ma el orden de complejidad
= O (n)
es lineal

3 - 14 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de los algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Algoritmos recursivos
Para evitar en cada caso un razonamiento c1nk si n < d
similar al anterior, podemos derivar una
frmula general de clculo en funcin de la T (n) =

estructura de la funcin recursiva, solucin iT(n d) + c2nk si n >= d


anal6ca de la ecuacin de recurrencias
adjunta
i: Nmero mximo de invocaciones recursivas por caso
d: Factor de decrecimiento del problema en la divisin del problema
n < d : Caso base
n >= d : Caso recursivo
c1nk, c2nk : Coste asociados a las partes no recursivas
k : Nivel de dependencia de las operaciones no recursivas con el tamao del problema
0 : Constante
1 : Lineal
2 : Cuadrtica

3 - 15 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de los algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Algoritmos recursivos
Para evitar en cada caso un razonamiento c1nk si n < d
similar al anterior, podemos derivar una
frmula general de clculo en funcin de la T (n) =

estructura de la funcin recursiva, solucin iT(n d) + c2nk si n >= d


anal6ca de la ecuacin de recurrencias
adjunta
Si reduccin por substraccin Si reduccin por divisin /

O (nk+1) si i == 1 O (nk) si i < dk

T (n) = T (n) = O (nk log n) si i = dk

O (in/d) si i > 1 O (nlogdi) si i > dk

3 - 16 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de los algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Algoritmos itera8vos
El coste temporal de un algoritmo itera6vo se calcula acumula6vamente a par6r del coste
de cada una de sus instrucciones cons6tuyentes. Estudiemos su coste
Instruccin Coste Instruccin Coste

Operaciones bsicas1 Sentencias iterativas


- Entrada / salida O(1) - for (ini;e;inc) {b} max {O(ini), n max {O(e), O(inc), O(b)}}
- Asignacin O(1) - while (e) {b} n max {O(e), O(b)}
- Expresiones escalares O(1) - do {b} while (e) n max {O(e), O(b)}
Secuencias sentencias Invocacin subprogramas
- s1; s2; s3 O(si) = max {O (si)} - f (e1, e2) Max {O(e1), O(e2), O(f)}
Sentencias condicionales Reglas de producto y suma
- if (e) {b1} else {b2} max {O(e), O(b1), O(b2)} - O (f + g) O(f + g) = max (O(f), O(g))
- switch (e) { max {O(e), O(b1), O(b2)} - O (f * g) O(f * g) = O(f) * O(g)
case c1 : b1;
1 Las Operaciones bsicas no
case c2 : b2;
} dependen del tamao del problema

3 - 17 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
Medida de la eciencia de los algoritmos

Cmo se mide la eciencia de los algoritmos?


La medida de la eciencia asint6ca de algoritmos pretende clasicar cada algoritmo en
una familia de complejidad asint6ca determinada prescindiendo de consideraciones
constantes o de escala. En nuestro estudio u6lizaremos medida temporal, caso peor y cota
superior

Algoritmos itera8vos
A par6r de los anlisis anteriores de coste
de cada instruccin analicemos la
eciencia de un algoritmo itera6vo

boolean ordenar (T[] v) {


int temp;
for (int i = 1; i < v.length; i++) O(1)
for (int k = i+1; k < v.length; k++) O(1)
if (v[i] < v[k]) { O(1) O(n2)
temp = v[k]; O(1)
v[k] = v[i]; O(1) O(1) O(1)(n-i) O(n)n
v[i]= temp; O(1)
} max max max max
}

3 - 18 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
BibliograWa

BibliograJa
Bibliografa bsica

Estructuras de datos en java. Weiss, Mark


Allen. Pearson Addison Wesley. ISBN
9788478290352

3 - 19 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es
Anlisis de la eciencia de los algoritmos
BibliograWa

BibliograJa
Bibliografa complementaria

Diseo de programas. Formalismo y


Fundamentos de Algoritmia. G. Brassard, P.
abstraccin. Ricardo Pea Mar. Pearson -
Bratley. Prentice Hall. SBN: 84-89660-00-X
Prentice Hall. ISBN 13: 9788420541914
1997

3 - 20 Javier Vlez Reyes jvelez@lsi.uned.es Jos Ignacio Mayorga Toledano nmayorga@lsi.uned .es