complejidad de algoritmos
DESCRIPTION
Nivel de y grado de complejidad de los algoritmos de programacionTRANSCRIPT
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
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
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
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.
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.
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.
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
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).
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
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
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
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
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
7/17/2019 Complejidad de Algoritmos
http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 14/45
Funciones de complejidad más frecuentes
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
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 ** ¿? ¿ ?
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.
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)
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)
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))
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
7/17/2019 Complejidad de Algoritmos
http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 22/45
Algoritmos iterativos
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) ))
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 ))
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 )))
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
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
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)
7/17/2019 Complejidad de Algoritmos
http://slidepdf.com/reader/full/complejidad-de-algoritmos-568e62561f302 29/45
Algoritmos recursivos
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
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.
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
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) =
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
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
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
. . .
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.
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.
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.
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
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.
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:
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.
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.
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):