You are on page 1of 20

Estrategias

de programacin y estructuras de datos


Grado en Ingeniera Inform8ca
Grado en Tecnologas de la Informacin

Departamento de Lenguajes y Sistemas inform6cos

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

3-2

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

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

3-3

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

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

3-4

Independencia

Estudio formal

De recursos de mquina

Terico

Del lenguaje de programacin

Comparativo

De aspectos constantes

Clasificatorio

De aspectos de escala

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

tiempo

<

while (!found && i <= v.length) {


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

Criterios de medida

La eficiencia de los algoritmos puede medirse


de acuerdo a la consumicin de diferentes
recursos. La medida de la eficiencia de un
algoritmo puede ser distinta segn el recurso

II. Segn el tipo de comportamiento


Fijado un tipo de recurso, la eficiencia de los
algoritmos puede medirse bajo distintos
supuestos en los que se supone se encuentra
el problema medio a analizar

II. Segn la mtrica utilizada


Fijado un tipo de recurso y un determinado
supuesto, debe escogerse una mtrica
comparativa que permita clasificar a los
algoritmos en familias con un comportamiento
interno similar

3-6

Espacial
Se analiza la relacin funcional existente entre
el tamao del problema expresado en trminos
de sus parmetros de entrada y la consumicin
del recurso memoria

Temporal
Se analiza la relacin funcional existente entre
el tamao del problema expresado en trminos
de sus parmetros de entrada y la consumicin
del recurso tiempo de cmputo

I. Segn el tipo de recurso

Foco de
atencin

Otros
Se analiza la relacin funcional existente entre
el tamao del problema expresado en trminos
de sus parmetros de entrada y la consumicin
de otros recursos como perifricos empleados,
ancho de banda, consumo elctrico, etc.

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

Criterios de medida

La eficiencia de los algoritmos puede medirse


de acuerdo a la consumicin de diferentes
recursos. El tipo de recurso establece una
particin del espacio de algoritmos distinta

II. Segn el tipo de comportamiento


Fijado un tipo de recurso, la eficiencia de los
algoritmos puede medirse bajo distintos
supuestos en los que se supone se encuentra
el problema medio a analizar

II. Segn la mtrica utilizada


Fijado un tipo de recurso y un determinado
supuesto, debe escogerse una mtrica
comparativa que permita clasificar a los
algoritmos en familias con un comportamiento
interno similar

3-7

Peor caso
Se estima la mxima cantidad de recursos que
un algoritmo puede necesitar consumir para su
ejecucin en funcin de su entrada. Supone
una cota superior de estos recursos

I. Segn el tipo de recurso

Foco de
atencin

Caso medio
Se estima el comportamiento a partir de una
hiptesis sobre la distribucin estadstica de los
datos de entrada que se supone ms probable.
Tambin llamado anlisis probabilstico

Mejor caso
Se estiman los recursos necesarios para su
ejecucin en condiciones ptimas en funcin de
la entrada. Esta medida afecta al ejemplar ms
sencillo del problema

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

Criterios de medida

La eficiencia de los algoritmos puede medirse


de acuerdo a la consumicin de diferentes
recursos. El tipo de recurso establece una
particin del espacio de algoritmos distinta

II. Segn el tipo de comportamiento


Fijado un tipo de recurso, la eficiencia de los
algoritmos puede medirse bajo distintos
supuestos en los que se supone se encuentra
el problema medio a analizar

II. Segn la mtrica utilizada


Fijado un tipo de recurso y un determinado
supuesto, debe escogerse una mtrica
comparativa que permita clasificar a los
algoritmos en familias con un comportamiento
interno similar

3-8

Cota superior. O
Se mide el coste asinttico de la ejecucin de
un algoritmo de acuerdo a una cota superior. Es
decir, la ejecucin nunca, a partir de cierto
valor, sobrepasar la cota de coste establecida

I. Segn el tipo de recurso

Foco de
atencin

Cota inferior.
Se mide el coste asinttico de la ejecucin de
un algoritmo de acuerdo a una cota inferior. Es
decir, la ejecucin nunca, a partir de cierto
valor, ser menor que la cota establecida

Cota exacta.
Se mide el coste asinttico de la ejecucin de
un algoritmo de acuerdo a una cota resultante
de la interseccin entre O y . Es decir, la
ejecucin crece al ritmo de la cota establecida

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.

Si g(n) es la funcin de coste de un


algoritmo, se dice que g(n) est en
O(f(n)) si a partir de un cierto punto
crece, a lo sumo, menos rpido que
f(n). Es decir, la grfica de g est por
debajo de la de f

3-9

Si g(n) es la funcin de coste de un


algoritmo, se dice que g(n) est en
(f(n)) si a partir de un cierto punto
crece ms rpido que f(n). Es decir,
la grfica de g est por encima de la
de f)

Cota exacta.
Si g(n) es la funcin de coste de un
algoritmo, se dice que g(n) est en
(f(n)) si crece de la misma forma (al
mismo ritmo) que f(n)

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


Si hacemos medidas expe-
rimentales sobre sucesivas
ejecuciones de un algorit-
mo y en cada ejecucin
duplicamos el tamao del
problema, observamos que
el 6empo de ejecucin
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
algoritmo es lineal

Bsqueda de un elemento en un vector


Tamao

Tiempo medido

Tiempo de ejecucin

A * n + B

2n

A * 2n + B

2t

3n

A * 3n + B

3t

...

...

...

kn

A * kn + B

kt

O (n)

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

Ordenes de eciencia
El anlisis asint6co nos permite
clasicar el espacio de algoritmos en
dis6ntas familias que se corresponden
con rdenes de complejidad diferentes
int factorial (int n) {
if (n == 0) return 1;
else return n * factorial (n - 1);
}

Hiperexponencial. O (nn)

Factorial. O (n!)
Exponencial de grado k. O (kn)
...
Exponencial. O (2n)
Polinmica de grado k. O (nk)
...
Cbica. O (n3)
Cuadrtica. O (n2)
Cuasilineal. O (n log n)
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;
else return n * factorial (n - 1);

T (n) =
T (n-1) + C2 si n > 0 Coste caso recurrente

}
Resolucin para factorial (5):
T(5) = T(4) + C2 = T(3) + C2 + C2 = T(2) + C2 + C2 + C2 = T(1) + C2 + C2 + C2 + C2
= O (n)

3 - 14

= T(0) + C2 + C2 + C2 + C2 + C2 = C1 + C2 + C2 + C2 + C2 + C2 = C1 + 5 * C2

Dado que el coste temporal


resulta linealmente proporcional al tamao del problema el orden de complejidad
es lineal

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
similar al anterior, podemos derivar una
frmula general de clculo en funcin de la
estructura de la funcin recursiva, solucin
anal6ca de la ecuacin de recurrencias
adjunta

c1nk si n < d
T (n) =
iT(n d) + c2nk si n >= d

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
similar al anterior, podemos derivar una
frmula general de clculo en funcin de la
estructura de la funcin recursiva, solucin
anal6ca de la ecuacin de recurrencias
adjunta
Si reduccin por substraccin

O (nk+1) si i == 1

T (n) =
iT(n d) + c2nk si n >= d

Si reduccin por divisin /

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

T (n) =
O (in/d) si i > 1

3 - 16

c1nk si n < d

O (nlogdi) si i > dk

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

3 - 17

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;

case c2 : b2;

1 Las Operaciones bsicas no

dependen del tamao del problema

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
Fundamentos de Algoritmia. G. Brassard, P.
Bratley. Prentice Hall. SBN: 84-89660-00-X
1997

3 - 20

Diseo de programas. Formalismo y


abstraccin. Ricardo Pea Mar. Pearson Prentice Hall. ISBN 13: 9788420541914

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

You might also like