Está en la página 1de 86

Unidad 1

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

Porqu estudiar Algoritmos?


Para evitar probar y ver qu sucede. Evitar
ambigedad
Medir tiempos de ejecucin.
Problemas:
Los tests podran no ser representativos de
todas las entradas.
Los tests no nos dicen si hay otras soluciones.

3/

/
08

16

Porqu estudiar Algoritmos?


Ventajas:
Sirve para predecir si el algoritmo es
utilizable.
Permite compararlo con otros algoritmos.
Ayuda a entender mejor el algoritmo.
Efectos:
Hacer mejoras en la eficiencia
Ayuda en la correctitud.
Permite definir nuevas estructuras de datos.
6
1
/

0
3/

Tipos de Algoritmos
Fuerza Bruta:
Buscan una solucin ptima a travs de una bsqueda
exhaustiva.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

El nmero de operaciones que involucra, o


cantidad de datos de comunicacin que requiere
Tiempo de cmputo utilizado.

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

Cuando un algoritmo se va a usar repetidamente


resulta importante que los algoritmos implicados sean
eficientes.
Generalmente, asociaremos eficiencia con el tiempo
de ejecucin del programa, y mas raramente con la
utilizacin de espacio de memoria.

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.

Eficiencia de los algoritmos dependen de:


Tiempo: cantidad de tiempo de ejecucin.
Espacio: cantidad de memoria requerida

Ambas dependen del computador, por lo que


normalmente se estudia la eficiencia de los
algoritmos.
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

19

EFICIENCIA DE ALGORITMOS
Multiplicado por 1000 el tamao de datos

3/

/
08

Programa Consumo N=1.000

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

25

COMPLEJIDAD TEMPORAL/ESPACIAL
Complejidad Temporal Asinttica:

Tiempo requerido (unidades de tiempo) por un


algoritmo para procesar una entrada de tamao n.
Complejidad Espacial Asinttica:

Comportamiento lmite del algoritmo conforme el


tamao del problema se incrementa.
Determinar el tamao del problema que puede ser
resuelto por un algoritmo.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

30

COMPLEJIDAD COMPUTACIONAL
Enfoques para medir la complejidad de un
algoritmo:
Enfoque empricos o a posteriori
Enfoque terico o a priori.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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/

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

Es preferible el estudio a priori

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

36

COMPLEJIDAD COMPUTACIONAL

El estudio a posteriori trata con programas. El estudio


a
priori trata con algoritmos

Es preferible el estudio a priori

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

38

EJEMPLOS DE COMPLEJIDAD ASINTTICA


1.- 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
ENTONCESmaxActual A[i]
DEVOLVER maxActual
FIN

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

39

EJEMPLOS DE COMPLEJIDAD ASINTTICA


Ejemplo en pseudocdigo: Operaciones
primitivas

Cmputos bsicos realizados por


un algoritmo
Identificables en pseudocdigo
Muy independiente del lenguaje de
programacin
La definicin exacta no es
importante

3/

/
08

16

Ejemplos:
Evaluar una
expresin
Asignar un valor a
una variable
Indexar un array
Llamar a un
mtodo
Retornar un valor

UNIDAD I DIAGRAMA DE FLUJO

40

EJEMPLOS DE COMPLEJIDAD ASINTTICA


Revisando el pseudocdigo, se puede estipular el nmero
mximo de operaciones primitivas ejecutadas por un
algoritmo, como una funcin del tamao de la entrada

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

UNIDAD I DIAGRAMA DE FLUJO

41

EJEMPLOS DE COMPLEJIDAD ASINTTICA


El algoritmo maximoArray ejecuta 7n 1 operaciones
primitivas en el peor de los casos
Se definen:
a
Tiempo tardado por la operacin primitiva ms rpida
b
Tiempo tardado por la operacin primitiva ms lenta
Sea T(n) el tiempo de ejecucin real para el peor de los
casos
de maximoArray . Entonces:
a (7n 1) T(n) b(7n 1)
Por lo tanto, el tiempo de ejecucin T(n) est acotado
por
6
/1
UNIDAD I DIAGRAMA DE FLUJO
8
/0
3
dos
funciones
lineales.
0

42

EJEMPLOS DE COMPLEJIDAD ASINTTICA


Un cambio en el entorno hardware/software
Afecta a T(n) en un factor constante, pero
No altera la tasa de crecimiento de T(n)
La tasa de crecimiento lineal del tiempo de
ejecucin
T(n) es una propiedad intrnseca del
algoritmo
maximoArray
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

43

EJEMPLOS DE COMPLEJIDAD ASINTTICA


Tasa de crecimiento:
Lineal n
Cuadrtica n2
Cbica n3

En un diagrama
logartmico, la
pendiente de la lnea
corresponde a la tasa
de crecimiento de la
funcin
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

44

EJEMPLOS DE COMPLEJIDAD ASINTTICA


La tasa de
crecimiento no se
ve afectada por:
Factores constantes
Trminos de orden
menor

Ejemplos
102n + 105 es una funcin
lineal
105n2 + 108n es una
funcin cuadrtica

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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/

UNIDAD I DIAGRAMA DE FLUJO

47

LA NOTACIN O
Ejercicio:
5n3 + 3n2 +1 O(n3)

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

53

LA NOTACIN O
Jerarqua de rdenes de complejidad

3/

O(1)

Constante

No depende del tamao del


problema

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

UNIDAD I DIAGRAMA DE FLUJO

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:

1: La mayor parte de las instrucciones se ejecutan una o muy pocas veces


(tiempo constante).

log n (logartmico): Desempeo tpico de algoritmos que resuelven un


problema de gran tamao transformndolo en uno ms pequeo,
dividindolo mediante un fraccin constante.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

55

CLASIFICACIN DE ALGORITMOS

n(lineal): Para cada elemento de entrada se realiza una operacin.

n log n: Algoritmos que resuelven un problema dividindolos en


pequeos subproblemas y resolvindolos independientemente y
combinando despus las soluciones.

n2(cuadrtico): Prctico para conjuntos de datos pequeos.


Tpicamente aparecen cuando se procesan pares de elementos de
datos.

n3(cbico): Aparecen cuando se procesan ternas de elementos de


datos.

2n(exponencial): Son poco tiles en la prctica y aparecen al aplicar


mtodos de 'fuerza bruta' o al utilizar inapropiadamente la
recursin.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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.

Es una indicacin del crecimiento del tiempo de ejecucin cuando crece


el tamao del problema.
Por ejemplo, en un algoritmo de ordenacin que ordene los registros de
arreglo.
El tiempo de ejecucin crece cuando crece el nmero de registros o
elementos a ordenar.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

57

ORDEN DE COMPLEJIDAD DE
ALGORITMOS

Indica cmo crece el tiempo de ejecucin. Cuando se habla de


coste asinttico no se trata de expresar una medida absoluta del
tiempo de ejecucin del algoritmo. Se trata de expresar cmo
vara el tiempo de ejecucin cuando el tamao del problema
crece.

Se han de tener en cuenta otros factores al analizar el coste de


ejecucin de un algoritmo.
El contenido de los datos de entrada influye tambin en el
tiempo de ejecucin de muchos algoritmos.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

59

Velocidad de Crecimiento

Ejemplo: Con una combinacin determinada de compilador y


mquina.
Programa 1: 100 n2 milisegundos
Programa 2: 5 n3 milisegundos
Programa 1 es mejor que el programa 2???

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

60

Suponer: Se dispone de 1000 segundos, o alrededor de 17


minutos para resolver un problema.
Aumento
porcentual

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)

Suponer: ahora se dispone de 10 veces ms tiempo que antes


(10000 seg.)
Mientras exista la necesidad de resolver problemas cada vez ms grandes,
se producir una situacin casi paradjica. A medida que los computadores
aumenten su rapidez y disminuyan su precio, tambin el deseo de resolver
problemas ms grandes y complejos seguir creciendo. As la importancia
del descubrimiento y el empleo de algoritmos eficientes (aquellos cuyas
velocidades de crecimiento sean pequeas) ir en aumento.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

61

COMPARACIN ENTRE DIFERENTES COMPLEJIDADES:


n

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

**

* el nmero de instrucciones que puede ejecutar un supercomputador en 500 aos.


** sera 500 billones de veces la edad del universo (20 billones de aos) en nanosegundos.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

64

ANLISIS DEL CASO PEOR, CASO


MEJOR O CASO PROMEDIO
Se puede analizar cualquier algoritmo desde este punto
de vista o una clase de ellos.
Una clase de algoritmos para un problema son aquellos
que se pueden clasificar por el tipo de operacin
fundamental que realizan, por ejemplo,
Problema: Ordenamiento.
Clase: Ordenamiento por comparacin.
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

65

ANLISIS DEL CASO PEOR, CASO


MEJOR O CASO PROMEDIO
Para otros algoritmos, diferentes entradas para un tamao
dado pueden requerir diferentes cantidades de tiempo.
Ejemplo: considerar la posicin de un valor k en un arreglo de

n elementos y suponer que slo se recorre una vez y el valor


est y no se repite tenemos que:
a. El mejor caso es cuando el elemento est en la primera
posicin del arreglo.
b. El peor caso es cuando el elemento se encuentra en la ltima
posicin del arreglo.
c. El
caso
promedio
es
cuando
debemos
encontrarlo
considerando todas las posibles posiciones descartando las
dos anteriores.
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

66

ANLISIS DEL CASO PEOR, CASO MEJOR O


CASO PROMEDIO
La ventaja de analizar los algoritmos de acuerdo a cada uno
de sus casos es que si examinamos el peor o mejor caso,
sabemos que el algoritmo se desempear alguna vez de
esa manera, en cambio cuando un algoritmo se ejecuta
muchas veces con muchos tipos de entradas nos interesa el
comportamiento promedio o comn. Desafortunadamente,
esto supone que sabemos cmo estn distribuidos los
datos.
Si se conoce la distribucin de los datos se puede realizar
un mejor anlisis y diseo de algoritmos. Sino lo conocemos
es mejor considerar el peor de los casos.
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

67

ANLISIS DEL CASO PEOR, CASO


MEJOR O CASO PROMEDIO
Peor caso: indica el mayor tiempo obtenido, teniendo
en consideracin todas las entradas posibles.
Mejor caso: indica el menor tiempo obtenido, teniendo
en consideracin todas las entradas posibles.
Media: indica el tiempo medio obtenido, considerando
todas las entradas posibles.
Es difcil analizar el comportamiento de todas las entradas posibles
entonces se analizar cada caso por problema o algoritmo que se tenga,
siendo el caso promedio la medida ms realista, pero ms difcil de
calcular ya que supone que todas las entradas son igualmente probables
(lo que puede ser verdadero o no).
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

69

Anlisis Mejor, Peor y Caso Promedio


Ejercicio: Programa de clasificacin burbuja que ordena un
arreglo de enteros de menor a mayor.
procedure burbuja (var A : array [1..n] of integer);
var
i, j, temp : integer;
begin
(1)

for i := 1 to n-1 do

(2)

for j := n downto i+1 do

(3)

if A[j-1] > A[j] then begin


{intercambia A[j-1] y A[j]}

(4)

temp. := A[j-1];

(5)

A[j-1] := A[j];

(6)

A[j] := temp;
End
End; {burbuja}

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

70

Anlisis Mejor, Peor y Caso Promedio


Ejemplo:
Algoritmo busca un cierto valor en un conjunto:
BUSCAR (dado un arreglo V de N elementos, buscar si el elemento X est
o no en el arreglo)
1.-

esta = no

2.-

I=1

3.-

While I <= N and (esta = no)


3.1.- If V[I] = X
then esta := si
else I := I + 1

4.-

write (valor de, X, esta, fue encontrado)

fin

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

71

Anlisis Mejor, Peor y Caso Promedio


Mejor Caso
El mejor caso sucede cuando se ingresa la menor cantidad de
veces al while de la lnea 3, independiente del valor de N.
Esto sucede si la primera vez que verifica la condicin de la lnea
3.1 resulta verdadera, con lo cual el mejor caso para este
algoritmo es que el valor buscado se encuentre en la primera
posicin del vector.
Se realiza una cantidad constante de operaciones (no depende de N).

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

72

Anlisis Mejor, Peor y Caso Promedio


Peor Caso
Si se ingresa N veces a la iteracin, y en el ltimo ingreso la
condicin de la lnea 3.1 es verdadera. Esto significa que los
valores que hacen que el algoritmo realice la mayor cantidad de
trabajo es un arreglo en el cual el valor buscado est en la ltima
posicin.
Se realiza una cantidad de operaciones proporcional al
tamao del arreglo (C*N)

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

73

Anlisis Mejor, Peor y Caso Promedio


Caso Promedio
Hiptesis: cualquier arreglo tiene la misma posibilidad que
cualquier otro.
En un arreglo de N posiciones el valor buscado puede estar en
cualquiera de ellas o no estar. Por lo tanto se deben considerar
N+1 casos.
Para los casos en que el elemento buscado est, el trabajo
realizado es proporcional a la posicin donde se encuentra el
elemento, y para el caso en que no se encuentra es prcticamente
igual al caso de encontrarse en el ltimo lugar.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

74

REGLAS GENERALES PARA ANLISIS


DE PROGRAMAS
T(n) de cada proposicin de asignacin (lectura y
escritura), por
lo comn puede tomarse como O(1).
Excepciones:
Una asignacin puede implicar matrices arbitrariamente
grandes
Cualquier lenguaje donde se permitan llamadas a
funciones
en las proposiciones de asignacin
T(n) de una secuencia de proposiciones se determina
por la regla de la suma.
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

75

REGLAS GENERALES PARA ANLISIS


DE PROGRAMAS
T(n) de una proposicin condicional if es el costo de las
proposiciones que se ejecutan condicionalmente, ms
el tiempo para evaluar la condicin.
El tiempo para evaluar la condicin, por lo general, es O(1).
El tiempo para un ciclo if-then-else es la suma del tiempo
requerido para evaluar la condicin ms el mayor de
los tiempos necesarios para ejecutar las proposiciones
cuando la condicin es verdadera y el tiempo de
ejecucin de las proposiciones cuando la condicin es
falsa.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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

REGLAS DE LA NOTACIN O GRANDE


1.- Si multiplicamos el orden de una funcin por una constante, el
Orden del algoritmo sigue siendo el mismo.
O(c-f(n)) = O(f(n))
2.- La suma del orden de dos funciones es igual al orden de la mayor.
O(f(n)+g(n)) = O(mx(f(n)*g(n)).
3.-Si multiplicamos el orden de dos funciones el resultado esta
multiplicacin de los ordenes.

Orden de crecimiento de funciones conocidas.


O(1) < O(log(n)) < O(n) < O(nlog(n)) < O(nk) < O(kn)

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

78

Reglas de calculo de complejidad de T(n)


1.- Sentencias Sencillas.
Corresponden a las sentencias de entrada/salida, asignacin.
La inmensa mayora de las sentencias de un algoritmo
requieren un tiempo constante de ejecucin.
Complejidad O(1).
2.- Secuencia.
La complejidad de una serie de elementos de un programa es
el orden de la suma de las complejidades individuales.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

79

Reglas de calculo de complejidad de T(n)


3.- Bifurcaciones.

Para las sentencias de bifurcacin (IF, CASE) el orden resultante


ser el de la bifurcacin con mayor orden.
4.-Bucles.
Para los bucles es el orden del cuerpo del bucle sumado tantas
veces como se ejecute el bucle.
El orden de una llamada a un subprograma no recursivo es el
orden del subprograma.
5.-Decisin.
La condicin suele ser O(1); complejidad a sumar con la peor
6
posible
complejidad, entre la rama THEN
oI DIAGRAMA
bien la rama
ELSE.
/1
80
UNIDAD
DE
FLUJO
8
0
/
03 las decisiones mltiples, se toma la peor rama
En

Reglas de calculo de complejidad de T(n)


6.- Ciclos.
En los ciclos con contador explcito, se puede distinguir dos
casos, que el tamao N forme parte de los lmites o que no.
Si el ciclo se realiza un nmero fijos de veces, independiente
de N, entonces
La repeticin solo introduce una constante multiplicativa que
puede absorberse.

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

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)

UNIDAD I DIAGRAMA DE FLUJO

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

T1( n)=1 es (1) ; T2( n)= (n2 ) ; T3 (n)=(n)


Luego: T1( n) + T2( n) + T3 (n)= (n2)
UNIDAD I DIAGRAMA DE FLUJO

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

UNIDAD I DIAGRAMA DE FLUJO

84

EJEMPLO

De (1) -> O(1)

(1)for i:=1 to n do

De (2) -> O(n)

(2) for j:=1 to n do

Luego la complejidad de (1) y (2)

(3)
end;

algo_de_O(1)

es O(1) * O(n) = O(n)


De (3) -> O(n)
Luego la complejidad es:
f(n)=O(n)*O(n)= O(n2)

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

85

EJEMPLO

c:=1
while (c< n) do
Algo_de_O(1);

n<= 2k /log
n<=k log 2

c:=2 * c;

k=log2(n) Entero inmediato


superior

la complejidad es O(log n)
0

3/

/
08

16

UNIDAD I DIAGRAMA DE FLUJO

86

También podría gustarte