45
Karim Guevara Puente de la Vega [email protected]  UCSM, 2014 Complejidad de Algoritmos

Complejidad de Algoritmos

Embed Size (px)

DESCRIPTION

Nivel de y grado de complejidad de los algoritmos de programacion

Citation preview

Page 1: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 1/45

Karim Guevara Puente de la Vega

[email protected] UCSM, 2014

Complejidad de Algoritmos

Page 2: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 2/45

Agenda

Introducción

Tipos de Algoritmos

Medidas de eficiencia

Complejidad algoritmica

Tiempo de ejecución

Notaciones asintóticas

Análisis de algoritmos no recursivos

Análisis de algoritmos recursivos

Page 3: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 3/45

Introducción

La solución de un problema haciendo uso de lascomputadoras 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

Page 4: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 4/45

Muchas alternativas de solución

Cuando hay necesidad de elegir entre variosalgoritmos, ¿cómo se debe elegir?...

Hay tres objetivos que suelen contradecirse:

1. Que el algoritmo sea fácil 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.

Page 5: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 5/45

Tipos de algoritmos

Algoritmos polinomiales

Aquellos que son proporcionales a nk.

En general son factibles o aplicables: son solucionables

Algoritmos exponenciales

Aquellos que son proporcionales a kn

En general, no son factibles salvo un tamaño deentrada n exageradamente pequeño.

Page 6: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 6/45

Los recursos utilizados dependen de:

Factores externos:

El computador donde lo ejecutamos

El lenguaje de programación y el compilador que usamos

La implementación que haga el programador del algoritmo(estructuras de datos utilizadas)

Tamaño de los datos de entrada

E.j.: calcular la media de una matriz de NxM

Contenido de los datos de entrada: Mejor caso: el contenido favorece una rápida ejecución

Peor caso: la ejecución más lenta posible.

Caso promedio: media de todos los posibles contenidos.

Page 7: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 7/45

¿Cómo saber si es el mejor algoritmo?

A posteriori (empírico) : Implementación del algoritmo en un computador Se comprueba para distintos tamaños de los datos del

problema y se compara

Se pierde tiempo en caso el algoritmo sea malo. A priori (teórico):

Se determina matemáticamente la cantidad de recursosutilizados, en función del tamaño de los datos del problema.

Análisis independiente del computador Un algoritmo será mas eficiente siempre que consuma menos

recursos: Tiempo Espacio de memoria

Page 8: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 8/45

¿Complejidad algorítmica?

La eficiencia de un algoritmo puede ser cuantificada con lassiguientes medidas de complejidad:  Complejidad Temporal o Tiempo de ejecución: Tiempo de cómputo

necesario para ejecutar algún programa.

Complejidad Espacial: Memoria que utiliza un programa para suejecución

El análisis se basa en las Complejidades Temporales: para cada

problema determinaremos una medidan (tamaño de laentrada).

Page 9: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 9/45

Importancia de la eficiencia

Que utilidad tiene diseñar algoritmos eficientes si las computadoras

procesan la información cada vez más rápido?

“ 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 2n

,¿Cuánto tiempo se tardará en procesar una entrada n de datos?

n Tiempo

10  1 décima de segundo

20  2 minutos30 > 1 día

40 > 3 años

50  3570 años

100

 4.019,693,684,133,150 milenios

Page 10: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 10/45

Importancia de la eficiencia

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 cúbica n3,

¿Cuánto tiempo se tardará en procesar una entrada n de datos?

n Tiempo

10  1 décima de segundo

20  8 décima de segundo

100  1.7 minutos

200  13.3 minutos

1000  1 día

Page 11: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 11/45

Tiempo de ejecución

Se mide en función de n: T(n)   tiempo de

ejecución Esta función se puede calculardirectamente sobre el código:

Instrucciones1;

Para x 0 hasta n hacer

Instrucciones2;

Demanda: T(n) = t1 + t2 * n Generalmente los algoritmos contienen sentencias

condicionales o selectivas, por lo que hay más de un valorpara T(n): "el peor caso“, "el mejor caso" y "el caso promedio“. 

t1

t2 * n

Page 12: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 12/45

Notaciones Asintóticas

El tiempo de ejecución T(n) está dado en base a unasconstantes que dependen de factores externos.

Nos interesa un análisis que sea independiente de

esos factores Notaciones asintóticas: indica como crece T, para

valores suficientemente grandes (asintóticamente) sinconsiderar constantes.

O(T): orden de complejidad de T   (T): orden inferior de T, u omega de T.

  (T): orden exacto de T

Page 13: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 13/45

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

Sea el siguiente algoritmo:

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 

Page 14: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 14/45

Funciones de complejidad más frecuentes

Page 15: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 15/45

Funciones de complejidad más frecuentes

O(1) Constante

No depende del tamaño del problema

 Algunos algoritmos de búsqueda en Tabla

Hashing

EficienteO(log n) Logarítmica Búsqueda binaria

O(n) Lineal

Búsqueda lineal o secuencial, búsqueda en

texto

O(n•log n) Casi lineal QuickSort

O(n 2) Cuadrática Algoritmo de la burbuja, QuickSort (peor caso)

TratableO(n 3) Cúbica Producto de matrices

O(n k) k>3 Polinómica

O(k n) k>1 Exponencial

 Algunos algoritmos de grafos, muchos

problemas de optimización, por lo general en

fuerza bruta Intratable

O(n!) Factorial

 Algunos algoritmos de grafos , todas las

permutaciones

Page 16: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 16/45

Funciones de complejidad más frecuentes

La complejidad no polinomial (NP) o exponencial es aquella que

tiene un orden mayor que la polinomial. Ejemplo: La complejidad

exponencial O (kn ).

Comparación entre diferentes complejidades: 

n lg n n lg n n2  n3  2n  3n  n!

1 0 0 1 1 2 3 1

2 1 2 4 8 4 9 2

4 2 8 16 64 16 81 248 3 24 64 512 256 6.561 40.320

16 4 64 256 4.096 65.536 43.046.721 20.922.789.888.000

32 5 160 1.024 32.768 4.294.967.296 ¿ ? ¿ ?

64 6 384 4.096 262.144 * ¿? ¿ ?

128 7 896 16.384 2.097.152 ** ¿? ¿ ?

Page 17: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 17/45

Propiedades de la notación O()

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 razón de crecimiento de una suma está dada por

el término cuya razón de crecimiento es mayor:

Si f  es O(g) y g es O(h) entonces f  es O(h) Si f  crece más rápido que g, y g crece más rápido

que h, entonces f  crece más rápido que h.

Page 18: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 18/45

Propiedades de la notación O()

Sean f(n) y g(n) un par de funciones:

Potencias mayores de n crecen más rápido quepotencias menores:

Si Or<s, entonces nr  es O(n s ) y n s no es O(nr  )

La razón de crecimiento de un polinomio está dadopor el término 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)

Page 19: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 19/45

Propiedades de la notación O()

Sean f(n) y g(n) un par de funciones:

La razón de crecimiento de un producto está dadopor la multiplicación de la razón de crecimiento

Si f es O(n) y g es O(k), entonces fg es O(nk)

Las funciones logaritmo crecen más lento que laspotencias

Si k > 0, entonces In n es O(nk)

Todas las funciones logaritmo crecen a la mismarazón.

Si b > 1 y c > 1. entonces logb n es O(logc n)

Page 20: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 20/45

Reglas de notación asintótica

Sean T 1(n) y T 2(n) dos funciones que expresan los tiempos deejecución de dos fragmentos de un programa, y se acotan deforma que se tiene: 

Regla de la sumaT 1(n) = O(f1(n)) y T 2(n) = O(f2(n))

Se puede decir que:

T 1(n) + T 2(n) = O(max(f1(n),f2(n))) 

Regla del productoT 1(n) = O(f1(n)) y T 2(n) = O(f2(n))

Se puede decir que:

T 1(n) T 2(n) = O(f1(n) f2(n)) 

Page 21: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 21/45

Por tanto…. 

Se puede concluir, que solo un algoritmo eficiente, con un ordende complejidad bajo puede tratar grandes volumenes dedatos. 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

Page 22: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 22/45

Algoritmos iterativos

Page 23: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 23/45

Instrucciones secuenciales

Asignaciones y expresiones simples

Tiempo de ejecución constante O(1).

Secuencia de instrucciones

Tiempo de ejecución = suma de sus tiempos deejecución individuales.

P.e.: 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) )) 

Page 24: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 24/45

Instrucciones condicionales

 SI-ENTONCES : es el tiempo necesario para evaluar lacondición, más el requerido para el conjunto deinstrucciones.

T(  SI -ENTONCES  ) = T(condición) + T(rama ENTONCES  )

Aplicando la regla de la suma:O(T(  SI -ENTONCES  )) = max(O( T(condición),T(rama ENTONCES  ))

Page 25: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 25/45

Instrucciones condicionales

 SI-ENTONCES-SINO: tiempo para evaluar la condición,más el máximo valor del conjunto de instrucciones delas ramas ENTONCES y SINO.

(  SI -ENTONCES - SINO ) = T(condición) + max(T(rama ENTONCES  ),T(rama SINO ))

Aplicando la regla de la suma:

O(T(  SI -ENTONCES - SINO )) = O( T(condición)) +

max(O(T(rama ENTONCES  )), O(T(rama SINO )))

Page 26: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 26/45

 PARA: es el producto del número de iteraciones por lacomplejidad de las instrucciones del cuerpo del mismo bucle.

 MIENTRAS-HACER y HACER-MIENTRAS : igual que PARA, perose considera la evaluación del número de iteraciones para elpeor caso posible.

Si existen ciclos anidados, realizar el análisis de adentro haciafuera.

Instrucciones de iteración

Page 27: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 27/45

Ejercicios

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

PARA i1 HASTA  n

PARA i1 HASTA  n

C[i,j]0;

PARA  k1 HASTA  nC[i,j] C[i,j] +A[i,k]* B[k,j]; 

FIN-PARA

FIN-PARA

FIN-PARA

FIN PROCEDIMIENTO

I5

I4

I3

I2

I1

Page 28: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 28/45

Llamadas a procedimientos

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, xINICIO

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);

FIN-PROCEDIMIENTO 

O(n3)

Page 29: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 29/45

Algoritmos recursivos

Page 30: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 30/45

Costo del algoritmo?

PROCEDIMIENTO Factorial (E entero: n; E/S entero: f)VARIABLES

entero: iINICIO

f   1PARA i 1 HASTA n 

f f * iFIN_PARA

FIN_PROCEDIMIENTO

entero : FUNCION Factorial (E entero: n)

INICIO SI n=0 ENTONCESRETORNA R 1

SINORETORNAR (n * Factorial (n-1))

FIN_SI

FIN_FUNCION

Page 31: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 31/45

Función de recurrencia

Una inspección al algoritmo puede resultar en unfunción de recurrencia:

Imita el flujo de control dentro del algoritmo.

Una vez obtenida esta función se puede aplicar algunatécnica:

Recurrencias homogéneas

Recurrencias no homogéneas

Cambio de variables, etc.

Page 32: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 32/45

Función de recurrencia

Por ejemplo:

1 si n=0

Factorial (n-1) * n en otro casoFactorial(n) =

1 si n=0

T(n-1) +1 en otro casoT(n) =

Función de

Recurrencia

entero : FUNCION Factorial (E entero: n)INICIO

SI n=0 ENTONCESRETORNA R 1

SINORETORNAR (n * Factorial (n-1))

FIN_SIFIN_FUNCION

Page 33: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 33/45

Función de recurrencia

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)

1 si n=0

T(n-1) +1 en otro casoT(n) =

Page 34: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 34/45

Árbol de recursión

Los árboles de recursión son una herramientavisual para analizar el costo de procedimientosrecursivos asociados a una estructura de árbol.

Método del árbol de recursión

Se construye el árbol para organizar por niveles lasoperaciones algebraicas necesarias para resolver larecurrencia.

Cada nodo del árbol tiene una estructura de dos

componentes: la función de costos

y el costo no-recursivo

Page 35: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 35/45

Árbol de recursión

Casos

progresivos

Caso base

Page 36: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 36/45

Utilización del árbol de recursión- Ejemplo 1

P.e.

Primero se construye el árbol de recurrenciadeterminando para cada nodo la función de costos y elcosto no recursivo.

Para cada nivel se calcula el costo total: 1er nivel: T(n); n2 costo: n2

2do nivel: T(n/2); (n/2) 2  costo: 2(n/2)2 =n2/2

. . .

Page 37: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 37/45

Utilización del árbol de recursión- Ejemplo 1

P.e.

Page 38: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 38/45

Utilización del árbol de recursión- Ejemplo 1

En cada nivel

el número de subproblemas aumenta en potencias de dos:

el tamaño de los problemas disminuye en potencias de dos.

la complejidad algorítmica total incrementa en potencias de dos(último nivel se tienen 2m nodos y cada nodo es de tamaño

(1/2m )n.

Page 39: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 39/45

Utilización del árbol de recursión- Ejemplo 1

Usando el patrón de complejidad y las condiciones determinación, la recurrencia se expresa como una sumatoria

El valor de m se determina igualando las dos expresiones del

caso base.

Page 40: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 40/45

Utilización del árbol de recursión- Ejemplo 1

Para la solución de T(n) se usa la serie geométrica con r=1/2.

Por tanto, la recurrencia T(n) revela que el algoritmo tiene unavelocidad de crecimiento….. cuadrática 

1/(2logn 2 -1 = 2/n 

Page 41: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 41/45

Utilización del árbol de recursión- Ejemplo 2

P.e.

Page 42: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 42/45

Utilización del árbol de recursión- Ejemplo 2

En cada nivel

el número de subproblemas aumenta en potencias de dos:

el tamaño más grande de problema disminuye por un factor de(2/3)i: 

la complejidad algorítmica permanece constante: 

Page 43: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 43/45

Utilización del árbol de recursión- Ejemplo 2

Usando el patrón de complejidad y las condiciones determinación, la recurrencia se expresa como una sumatoria

se obtiene una cota superior de las trayectorias restantes.

Page 44: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 44/45

Utilización del árbol de recursión- Ejemplo 2

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

Page 45: Complejidad de Algoritmos

7/17/2019 Complejidad de Algoritmos

http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 45/45

Utilización del árbol de recursión- Ejemplo 2

Para la solución de T(n):