You are on page 1of 44

Algoritmos y Estructura de Datos I

COMPLEJIDAD DE ALGORITMOS

UCSM - 2013

Karim Guevara Puente de la Vega

Agenda
2


Algoritmos y Estructura de Datos I

Introduccin Tipos de Algoritmos Medidas de eficiencia Complejidad algoritmica Tiempo de ejecucin Notaciones asintticas Anlisis de algoritmos no recursivos Anlisis de algoritmos recursivos

Introduccin
3

Algoritmos y Estructura de Datos I

La solucin de un problema haciendo uso de las computadoras requiere por una parte un algoritmo y por otra un programa en un LP. Ambos componentes tienen importancia; pero la del algoritmo es absolutamente indispensable

Muchas alternativas de solucin


4

Cuando hay necesidad de elegir entre varios algoritmos, cmo se debe elegir?...

Algoritmos y Estructura de Datos I

Hay tres objetivos que suelen contradecirse:

1. Que el algoritmo sea fcil de entender, codificar y depurar. 2. Que el algoritmo se ejecute con la mayor rapidez posible. 3. Que el algoritmo utilice de forma ptima la memoria disponible.

Tipos de algoritmos
5

Algoritmos polinomiales
Aquellos que son proporcionales a nk. En general son factibles o aplicables: son solucionables

Algoritmos y Estructura de Datos I

Algoritmos exponenciales
Aquellos que son proporcionales a kn En general, no son factibles salvo un tamao de entrada n exageradamente pequeo.

Los recursos utilizados dependen de:


6

Factores externos:

Algoritmos y Estructura de Datos I

El computador donde lo ejecutamos El lenguaje de programacin y el compilador que usamos La implementacin que haga el programador del algoritmo (estructuras de datos utilizadas) E.j.: calcular la media de una matriz de NxM Mejor caso: el contenido favorece una rpida ejecucin Peor caso: la ejecucin ms lenta posible. Caso promedio: media de todos los posibles contenidos.

Tamao de los datos de entrada

Contenido de los datos de entrada:


Cmo saber si es el mejor algoritmo?


7

A posteriori (emprico) :
Implementacin del algoritmo en un computador Se comprueba para distintos tamaos de los datos del problema y se compara Se pierde tiempo en caso el algoritmo sea malo.

Algoritmos y Estructura de Datos I

A priori (terico):
Se determina matemticamente la cantidad de recursos utilizados, en funcin del tamao de los datos del problema. Anlisis independiente del computador

Un algoritmo ser mas eficiente siempre que consuma menos recursos:


Tiempo Espacio de memoria

Complejidad algortmica?
8

La eficiencia de un algoritmo puede ser cuantificada con las siguientes medidas de complejidad:

Algoritmos y Estructura de Datos I

Complejidad Temporal o Tiempo de ejecucin: Tiempo de cmputo necesario para ejecutar algn programa. Complejidad Espacial: Memoria que utiliza un programa para su ejecucin

El anlisis se basa en las Complejidades Temporales: para cada problema determinaremos una medida n (tamao de la entrada).

Importancia de la eficiencia
9

Que utilidad tiene disear algoritmos eficientes si las computadoras procesan la informacin cada vez ms rpido?
Contamos con una computadora capaz de procesar datos en 10 -4 seg. En esta computadora se ejecuta un algoritmo que lee registros de una base de datos, dicho algoritmo tiene una complejidad exponencial 2 n,

Algoritmos y Estructura de Datos I

Cunto tiempo se tardar en procesar una entrada n de datos?


n 10 Tiempo 1 dcima de segundo

20
30

2 minutos
> 1 da

40
50 100

> 3 aos
3570 aos 4.019,693,684,133,150 milenios

Importancia de la eficiencia
10

Algoritmos y Estructura de Datos I

Ahora se tiene la misma computadora capaz de procesar datos en 10-4 seg. Pero se ejecuta un algoritmo que hace el mismo trabajo antes citado, pero este algoritmo tiene una complejidad cbica n3,

Cunto tiempo se tardar en procesar una entrada n de datos?


n
10

Tiempo
1 dcima de segundo

20
100 200

8 dcima de segundo
1.7 minutos 13.3 minutos

1000

1 da

Tiempo de ejecucin
11

Algoritmos y Estructura de Datos I

Se mide en funcin de n: T(n) tiempo de ejecucin Esta funcin se puede calcular directamente sobre el cdigo:
Instrucciones1; Para x 0 hasta n hacer Instrucciones2;
t1 t2 * n

Demanda: T(n) = t1 + t2 * n Generalmente los algoritmos contienen sentencias condicionales o selectivas, por lo que hay ms de un valor para T(n): "el peor caso, "el mejor caso" y "el caso promedio.

Notaciones Asintticas
12

Algoritmos y Estructura de Datos I

El tiempo de ejecucin T(n) est dado en base a unas constantes que dependen de factores externos. Nos interesa un anlisis que sea independiente de esos factores Notaciones asintticas: indica como crece T, para valores suficientemente grandes (asintticamente) sin considerar constantes.
O(T): orden de complejidad de T (T): orden inferior de T, u omega de T. (T): orden exacto de T

Orden de complejidad de f(n): O(f)


13

Sea el siguiente algoritmo:


Algoritmos y Estructura de Datos I

PARA x 1 HASTA n HACER PARA y 1 HASTA n HACER PARA z 1 HASTA n HACER PARA w 1 HASTA 3 HACER Instrucciones; PARA y 1 HASTA n HACER PARA z 1 HASTA n HACER PARA w 1 HASTA 2 HACER Instrucciones;

g(n) = 3n3+2n2

Funciones de complejidad ms frecuentes


14

Algoritmos y Estructura de Datos I

Funciones de complejidad ms frecuentes


15

O(1)
Algoritmos y Estructura de Datos I

Constante Logartmica Lineal Casi lineal Cuadrtica Cbica Polinmica

No depende del tamao del problema Algunos algoritmos de bsqueda en Tabla Hashing
Bsqueda binaria Bsqueda lineal o secuencial, bsqueda en texto QuickSort Algoritmo de la burbuja, QuickSort (peor caso) Producto de matrices Eficiente

O(log n) O(n) O(nlog n) O(n 2) O(n 3) O(n k) k>3

Tratable

O(k

n)

k>1

Exponencial Factorial

O(n!)

Algunos algoritmos de grafos, muchos problemas de optimizacin, por lo general en fuerza bruta Intratable Algunos algoritmos de grafos , todas las permutaciones

Funciones de complejidad ms frecuentes


16

Algoritmos y Estructura de Datos I

La complejidad no polinomial (NP) o exponencial es aquella que tiene un orden mayor que la polinomial. Ejemplo: La complejidad exponencial O (kn). Comparacin entre diferentes complejidades:
n lg n n lg n n2 n3 2n 3n n!

1
2 4 8 16 32 64 128

0
1 2 3 4 5 6 7

0
2 8 24 64 160 384 896

1
4 16 64 256 1.024 4.096 16.384

1
8 64 512 4.096 32.768 262.144 2.097.152

2
4 16 256 65.536 4.294.967.296 * **

3
9 81 6.561 43.046.721 ? ? ?

1
2 24 40.320 20.922.789.888.000 ? ? ?

Propiedades de la notacin O()


17

Algoritmos y Estructura de Datos I

Sean f(n) y g(n) un par de funciones: Los factores constantes pueden ser ignorados: kf(n) es O(f(n)) para cualquier K E.j. 5n2 es O(n2) 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) Si f crece ms rpido que g, y g crece ms rpido que h, entonces f crece ms rpido que h.

Propiedades de la notacin O()


18

Algoritmos y Estructura de Datos I

Sean f(n) y g(n) un par de funciones: Potencias mayores de n crecen ms rpido que potencias menores: Si Or<s, entonces nr es O(ns) y ns no es O(nr) La razn de crecimiento de un polinomio est dado por el trmino mayor (ignorando constantes) si p(n) es un polinomio de grado d, entonces p(n) es O(nd) E.j. 5n3+2n2+3n+2, es de O(n3)

Propiedades de la notacin O()


19

Algoritmos y Estructura de Datos I

Sean f(n) y g(n) un par de funciones: 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) Las funciones logaritmo crecen ms lento que las potencias Si k > 0, entonces In n es O(nk) Todas las funciones logaritmo crecen a la misma razn. Si b > 1 y c > 1. entonces logb n es O(logc n)

Reglas de notacin asinttica


20

Algoritmos y Estructura de Datos I

Sean T1(n) y T2(n) dos funciones que expresan los tiempos de ejecucin de dos fragmentos de un programa, y se acotan de forma que se tiene: Regla de la suma
T1(n) = O(f1(n)) y T2(n) = O(f2(n))

Se puede decir que:


T1(n) + T2(n) = O(max(f1(n),f2(n)))

Regla del producto


T1(n) = O(f1(n)) y T2(n) = O(f2(n)) Se puede decir que:

T1(n) T2(n) = O(f1(n) f2(n))

Por tanto.
21

Algoritmos y Estructura de Datos I

Se puede concluir, que solo un algoritmo eficiente, con un orden de complejidad bajo puede tratar grandes volumen de datos. Por tanto, un algoritmo es:

Muy eficiente si su complejidad es de orden log n

Eficiente si su complejidad es de orden nk


Ineficiente si su complejidad es de orden 2n

22

Algoritmos no recursivos

Algoritmos y Estructura de Datos I

Instrucciones secuenciales
23

Asignaciones y expresiones simples

Tiempo de ejecucin constante O(1).

Algoritmos y Estructura de Datos I

Secuencia de instrucciones
Tiempo de ejecucin = suma de sus tiempos de ejecucin individuales. Ejemplo: Sean S1 y S2, una secuencia de dos instrucciones: T(S1 ; S2) = T(S1) + T(S2) Aplicando la regla de la suma: O(T(S1 ; S2)) = max(O( T(S1), T(S2) ))

Instrucciones condicionales
24

IF-THEN: es el tiempo necesario para evaluar la condicin, ms el requerido para el conjunto de instrucciones.
T(SI-ENTONCES) = T(condicin) + T(rama ENTONCES)
Aplicando la regla de la suma: O(T(SI-ENTONCES)) = max(O( T(condicin),T(rama ENTONCES ))

Algoritmos y Estructura de Datos I

Instrucciones condicionales
25

Algoritmos y Estructura de Datos I

SI-ENTONCES-SINO: tiempo para evaluar la condicin, ms el mximo valor del conjunto de instrucciones de las ramas ENTONCES y SINO.
(SI-ENTONCES-SINO) = T(condicin) + max(T(rama ENTONCES), T(rama SINO))

Aplicando la regla de la suma:


O(T(SI-ENTONCES-SINO)) = O( T(condicin)) + max(O(T(rama ENTONCES)), O(T(rama SINO)))

Instrucciones de iteracin
26

PARA: es el producto del nmero de iteraciones por la complejidad de las instrucciones del cuerpo del mismo bucle.
MIENTRAS-HACER y HACER-MIENTRAS: igual que PARA, pero se considera la evaluacin del nmero de iteraciones para el peor caso posible.

Algoritmos y Estructura de Datos I

Si existen ciclos anidados, realizar el anlisis de adentro hacia fuera.

Ejercicios
27

PROCEDIMIENTO MatrizProducto (E entero :n; E entero . A[1..n,1..n], B[1..n,1..n]; E/S entero : C[1..n,1..n]) VARIABLES entero: i,j,k INICIO I1 PARA i1 HASTA n I2 PARA i1 HASTA n I3 C[i,j] 0; I4 PARA k1 HASTA n I5 C[i,j] C[i,j] +A[i,k]* B[k,j]; FIN-PARA FIN-PARA FIN-PARA FIN PROCEDIMIENTO

Algoritmos y Estructura de Datos I

Llamadas a procedimientos
28

Tiempo requerido para ejecutar el cuerpo del procedimiento llamado. Ejemplo:


PROCEDIMIENTO PRINCIPAL (E entero: A[1..n,1..n], B[1..n,1..n]; E/S entero: C[1..n,1..n]) VARIABLES entero: n, j, i, x INICIO LEER(n); i 1; MIENTRAS i<=n HACER PARA ji HASTA n A[i,j] j * 2; FIN-PARA ii+1 FIN-MIENTRAS MatrizProducto( n,A,B,C); 3) O(n FIN-PROCEDIMIENTO

Algoritmos y Estructura de Datos I

29

Algoritmos recursivos

Algoritmos y Estructura de Datos I

Funcin de recurrencia
30

Una inspeccin al algoritmo puede resultar en un funcin de recurrencia:

Algoritmos y Estructura de Datos I

Imita el flujo de control dentro del algoritmo.

Una vez obtenida esta funcin se puede aplicar alguna tcnica:


Recurrencias homogneas Recurrencias no homogneas Cambio de variables, etc.

Funcin de recurrencia
31

Por ejemplo:

Algoritmos y Estructura de Datos I

PROCEDURE Factorial (E entero: n, E/S entero: f) SI n<1 ENTONCES RETORNAR f1; SINO RETORNAR (f(Factorial(n-1) *n); FIN PROCEDURE
Factorial(n) = 1 Factorial (n-1) * n si n=0 en otro caso

T(n) =

1 T(n-1) +1

si n=0 en otro caso

Funcin de recurrencia
32

T(n) =
Algoritmos y Estructura de Datos I

1 T(n-1) +1

si n=0 en otro caso

T(n)

= (T(n-2) +1) +1 = T(n-2) +2

= (T(n-3) +1) +2 = T(n-3) +3 = (T(n-4) +1) +3 = T(n-4) +4 ... generalizando : = T(n-k) +k Si k=n : = T(n-n) +n = 1+n = max(0(1),O(n)) = O(n)

rbol de recursin
33

Algoritmos y Estructura de Datos I

Los rboles de recursin son una herramienta visual para analizar el costo de procedimientos recursivos asociados a una estructura de rbol. Mtodo del rbol de recursin
Se construye el rbol para organizar por niveles las operaciones algebraicas necesarias para resolver la recurrencia. Cada nodo del rbol tiene una estructura de dos componentes:

la funcin de costos y el costo no-recursivo

rbol de recursin
34

Algoritmos y Estructura de Datos I

Casos progresivos

Caso base

Utilizacin del rbol de recursin- Ejemplo 1


35

P.e.

Algoritmos y Estructura de Datos I

Primero se construye el rbol de recurrencia determinando para cada nodo la funcin de costos y el costo no recursivo. Para cada nivel se calcula el costo total:.
1er nivel: T(n); n2 2do nivel: T(n/2); (n/2) 2 ...

costo: n2 costo: 2(n/2)2 =n2/2

Utilizacin del rbol de recursin- Ejemplo 1


36

P.e.

Algoritmos y Estructura de Datos I

Utilizacin del rbol de recursin- Ejemplo 1


37

En cada nivel

el nmero de subproblemas aumenta en potencias de dos:

Algoritmos y Estructura de Datos I

el tamao de los problemas disminuye en potencias de dos.

la complejidad algortmica total incrementa en potencias de dos (ltimo nivel se tienen 2m nodos y cada nodo es de tamao (1/2m)n.

Utilizacin del rbol de recursin- Ejemplo 1


38

Usando el patrn de complejidad y las condiciones de terminacin, la recurrencia se expresa como una sumatoria

Algoritmos y Estructura de Datos I

El valor de m se determina igualando las dos expresiones del caso base.

Utilizacin del rbol de recursin- Ejemplo 1


39

Para la solucin de T(n) se usa la serie geomtrica con r=1/2.

Algoritmos y Estructura de Datos I

Por tanto, la recurrencia T(n) revela que el algoritmo tiene una velocidad de crecimiento.. cuadrtica
1/(2logn 2 -1 = 2/n

Utilizacin del rbol de recursin- Ejemplo 2


40

P.e.

Algoritmos y Estructura de Datos I

Utilizacin del rbol de recursin- Ejemplo 2


41

En cada nivel

el nmero de subproblemas aumenta en potencias de dos:

Algoritmos y Estructura de Datos I

el tamao ms grande de problema disminuye por un factor de (2/3)i:

la complejidad algortmica permanece constante:

Utilizacin del rbol de recursin- Ejemplo 2


42

Usando el patrn de complejidad y las condiciones de terminacin, la recurrencia se expresa como una sumatoria

Algoritmos y Estructura de Datos I

se obtiene una cota superior de las trayectorias restantes.

Utilizacin del rbol de recursin- Ejemplo 2


43

El valor de m se determina igualando las dos expresiones del caso base.

Algoritmos y Estructura de Datos I

Utilizacin del rbol de recursin- Ejemplo 2


44

Para la solucin de T(n):

Algoritmos y Estructura de Datos I

You might also like