35
Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: [email protected]

Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: [email protected]@gmail.com

Embed Size (px)

Citation preview

Page 1: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Análisis de Algoritmos

Dr. Rogelio Dávila PérezMaestría en Ciencias ComputacionalesUniversidad Autónoma de Guadalajarae-mail: [email protected]

Page 2: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Algoritmo

Webster’s Ninth New Collegiate dictionary:

“Un procedimiento para resolver un problema matemático, en un número finito de pasos que frecuentemente comprenden la repetición de alguna operación; o más general: un procedimiento paso-a-paso para resolver algún problema o alcanzar algún objetivo.”

Page 3: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Algoritmo

La gente por siglos a buscado mejores métodos para lograr su objetivos, tales como:

encender fuego, construir pirámides, repartir el correo, erigir una presa, aterrizar en la luna, etc.

Page 4: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Algoritmo

Muchos algoritmos computacionales se basan en métodos que se desarrollaron antes de que se inventaran las computadoras.

Page 5: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Algoritmo

Construir un algoritmo para ser ejecutado por una computadora implica ciertas consideraciones:

Restricciones del lenguaje. Una computadora recibe instrucciones vía un limitado y bien-definido conjunto de operaciones primitivas.

Una computadora puede ejecutar millones de instrucciones primitivas por segundo. Existe una tendencia hacia utilizar procedimientos que funcionan muy bien con ejemplos pequeños. Desafortunadamente algoritmos que funcionan perfectamente para problemas pequeños suelen comportarse de manera terrible cuando se aplican a problemas grandes.

Page 6: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Algoritmo

Construir un algoritmo … (cont.)

Necesidad de algoritmos de gran escala. Mientras que en la vida diaria un procedimiento rara vez se repite, las computadoras ejecutan procesos que se repiten un gran número de veces; por lo que surge la necesidad permanente de desarrollar métodos más eficientes o de mejorar los ya existentes.

Page 7: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Algoritmo

El proceso de construcción de un algoritmo computacional requiere de los siguientes pasos:

Diseño. Inicia con las ideas básicas y los métodos. Demostración de correctitud (prove the correctness).

Verificación de que el plan de proyecto es realizable. Análisis. Consiste en verificar la complejidad y eficiencia

del algoritmo. Implementación. Consiste en traducir el algoritmo a un

lenguaje que entienda el computador (programación).

El énfasis del curso será sobre los métodos para el diseño y el análisis de algoritmos.

Page 8: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Ejercicios

1. Suponga que cuenta con 100 tarjetas cada una numerada del 1 al 100. Revuelva todas las tarjetas y vuelva a ponerlas en orden.

2. Considere los siguientes números. Su tarea es borrar el menor número de elementos posibles de tal manera que los restantes queden en orden ascendente. Por ejemplo, eliminar todos los números excepto el primero y segundo los dejaría en orden ascendente.

9, 44, 32, 12, 7, 42, 34, 92, 35, 37, 41, 8, 20, 27, 83, 64, 61, 28, 39, 93, 29, 17, 13, 14, 55, 21, 66, 72, 23, 99, 1, 2, 88, 77, 3, 65, 83, 84, 62, 5, 11, 74, 68, 76, 78, 67, 75, 69, 70, 22, 71, 24, 25, 26.

Page 9: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Ejercicios (cont.)

3. Calcule el valor de 264. Intente encontrar alguna manera de minimizar el número de multiplicaciones.

4. Suponga que en un país extraño existen cinco tipos distintos de monedas con denominaciones de 15, 13, 29, 41, y 67 (todos en centavos). Encuentre una combinación de estas monedas que le permitan pagar 18 dólares y 8 centavos (1808 centavos). Asuma que cuenta con suficientes monedas de cada tipo en su bolsillo.

5. Encuentre el máximo común divisor1 de 225277 y 178794.

1 El máximo común divisor de dos enteros es el entero más grande que los divide a ambos.

Page 10: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Inducción Matemática

DefiniciónSea el conjunto C = {x N| P(x)}. Si se satisface:

• P(1) es verdadero.• Si se cumple que para un k arbitrario (k N):

De suponer P(k), logramos demostrar P(k+1)

Entonces C = N (C es el conjunto de los Naturales)

Ejemplo:

6)12)(1(

1

2

nnni

n

i

Page 11: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Inducción Matemática

Ejercicios

1. Demuestre que: 8+13+18+23+…+(3+5n) = 2.5n2+5.5n

Demuestre que para todo n que pertenece a los naturales, xn-1 es divisible entre x-1.

Si n es un número natural y 1+x > 0, entonces: (1+x) n 1 + nx

1. Considere el triangulo siguiente:

Encuentre una expresión para la suma del renglón i-ésimo y demuestre que es correcta.

1 = 1 3 + 5 = 8 7 + 9 + 11 = 27 13 + 15 + 17 + 19 = 6421 + 23 + 25 + 27 + 29 = 125

Page 12: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Análisis de Algoritmos

El propósito del análisis de algoritmos es predecir su comportamiento, especialmente al momento de ejecución, sin necesidad de implementarlo en algún lenguaje de computadora.

Page 13: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Análisis de Algoritmos

¿Por qué es importante analizar el algoritmo?

Es conveniente el poder obtener mediciones simples de la eficiencia de un algoritmo antes de implementarlo.

Es muy difícil medir la eficiencia real de un algoritmo ya implementado pues esta varía dependiendo del computador, del lenguaje en que se implementó o del compilador con que se cuente.

Page 14: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Análisis de Algoritmos

Planteamiento inicial Dado un problema y una definición de su tamaño,

deseamos encontrar una expresión para obtener el tiempo de ejecución del algoritmo con relación al tamaño del problema.

El tamaño del problema se simplifica al considerar tan sólo el tamaño de la entrada.

No siempre se tiene un solo valor de tiempo para diferentes entradas del mismo tamaño, por lo que en general el tiempo que se considera es para la peor entrada (worst-case input).

El análisis que se considera es asintótico evaluando el tiempo de ejecución del algoritmo para entradas de gran tamaño y de manera creciente tendiendo hacia el infinito.

Page 15: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Funciones MonotónicasDef. Decimos que una función f(x) es monotónica, o no

decreciente, si x y siempre implica que f(x) f(y). Una función f(x) es nomonotónica, o no creciente, si f(x) es monotónica.

Ejemplos:

Funciones Monotónicas: f(x) = x

f(x) = x2 para x 0f(x) = log(x) para x > 0f(x) = ex

Funciones nomonotónicas:

f(x) = 1/x para x> 0

Page 16: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Oh

Def. Sean f y g dos funciones no negativas sobre los enteros positivos.

Escribimos:

y decimos que f(n) es de orden “a lo más” o orden

big oh de g(n) si existen constantes c > 0 y n0 tales que:

Page 17: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Decir que f(n) es de órden O(g(n)), significa:

Page 18: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Oh

Con otras palabras:

Def. Decimos que

Si y solo si,

Page 19: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Ejercicios:

1. Demostrar que si f3(n)=1+2+3+…+n, entonces f3 es de orden O(n2).

1+2+3+…+n=n(n+1)/2n+n+n+…+n= n·n = n2

2. Demostrar que si f1(n)=log(n!), entonces f1 es de orden O(n log n).

log(n!)=log(n·(n-1)·(n-2)·····2·1)) =log(n)+ log(n-1)+…+log(2)+log(1) log(n)+ log(n) +…+log(n)

+log(n)=n·log n

Page 20: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Oh

Demostrar

1. Si f(n)=O(s(n)) y g(n)=O(r(n)), entonces:f(n)+g(n)=O(s(n)+r(n))

2. Si f(n)=O(s(n)) y g(n)=O(r(n)), entonces:f(n)·g(n)=O(s(n)·r(n))

Page 21: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Oh

Teorema 1

Para cualesquiera constantes c > 0 y a > 1, y para todas las funciones monotónicas crecientes f(n),

(f(n)) c = O(af(n))

Es decir, una función exponencial siempre crecerá más rápido que una función polinomial.

Page 22: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Oh

Teorema 2

Sea p(n) = aknk+ ak-1n

k-1+ + a1n+ a0

Un polinomio nonegativo (es decir, p(n) 0 para todo n) en n de grado k, entonces:

p(n) = O(nk)

Page 23: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Oh

Demuestre las siguientes expresiones:

(a) x2 = O(x5)(b) sin x = O(x) (c) 14.709 sqrt(x) = O(x/2+7cos x) (d) 1/x = O(1) (e) 23 log x = O(x.02)

Page 24: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Oh

Categorías de Complejidad Nombre

O(1)O(log log n)O(log n)O(nc), 0<c<1O(n)O(n log n)O(n2)O(n3)

O(nk), k 1

O(cn), c>1O(n!)

ConstanteLog LogLog nSublinealLinealn Log nCuadráticaCúbicaPolinomialExponencialFactorial

Page 25: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Comportamiento de las funciones:

Función n=10 n=100

1 1 1

log n 3 7

n 10 100

n log n 30 700

n2 100 10000

2n 1024 1033

n! 3628800 100!

Page 26: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com
Page 27: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Complejidad de Algoritmos

Un problema para el cual existe un algoritmo de solución de un orden polinomial para el peor-caso, es considerado factible o tratable.

Un problema cuyo algoritmo de solución para el peor-caso, no es de orden polinomial, es llamado intratable. Un algoritmo que resuelva un problema intratable esta demostrado que tardara un largo tiempo en resolverlo en su peor-caso, aun para tamaños modestos de la entrada.

Page 28: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Complejidad de Algoritmos

Ciertos problemas son tan difíciles que no existen algoritmos que los resuelvan. Un programa para el que no existirá nunca un algoritmo que lo resuelva es llamado irresoluble (unsolvable) o no computable. Un gran número de problemas son reconocidos como irresolubles.

Uno de los primeros problemas que se demostró son irresolubles es el Halting problem o problema de Paro:

“Dado un programa arbitrario y un conjunto de entradas, ¿el programa eventualmente parará?”

Page 29: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Complejidad de Algoritmos

Un número grande de problemas resolubles, mantienen un estado indeterminado; se considera que son intratables, pero esto no se ha podido demostrar para ninguno de ellos.

La mayoría de estos problemas pertenecen a la clase de los NP-completos.

Muchos problemas prácticos se han identificado como NP-completos.

Page 30: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Complejidad de Algoritmos

Un ejemplo de programa NP-Completo es el siguiente:

Dada una formula arbitraria de la lógica proposicional, verificar si existe una asignación de valores de verdad a sus variables, que la vuelva verdadera.

Este es el llamado problema de satisfacibilidad.

Page 31: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Complejidad de Algoritmos

Es sabido que si se llegara a construir un algoritmo de orden polinomial para un problema NP-completo, automáticamente todos los problemas NP-completos tendrían soluciones en tiempo polinomial.

Como no se ha descubierto ningún algoritmo de tiempo polinomial para ninguno de ellos, entonces se conjetura que la clase de problemas NP-completos son intratables.

Page 32: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Omega

Def. Sean f y g dos funciones no negativas sobre los enteros positivos.

Escribimos:

f(n) = (g(n))

y decimos que f(n) es de orden de “al menos” o orden omega de g(n) si existen constantes c > 0 y a tales que:

f(n) c g(n) para toda n a

Page 33: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

La notación Big Theta

Def. Sean f y g dos funciones no negativas sobre los enteros positivos.

Escribimos:

f(n) = (g(n))

y decimos que f(n) es de orden de g(n) o de orden teta de g(n) :

si f(n) = O(g(n)) y f(n) = (g(n))

Page 34: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Clasificación de funciones por su tasa de crecimiento asintótico

g

(g): funciones que crecen por lo menos tan rapidamente como g.

(g): funciones que crecen con la misma rapidez que g.

O(g): funciones que no crecen más rapidamente que g.

Page 35: Análisis de Algoritmos Dr. Rogelio Dávila Pérez Maestría en Ciencias Computacionales Universidad Autónoma de Guadalajara e-mail: rdav90@gmail.comrdav90@gmail.com

Ejercicios:

1. Demostrar que si f(n) = log2 n! entonces:

f(n) = (n log2 n)

2. Demostrar que:

60 n2+5n+1 = (n2)