Analisis de Tiempos

Post on 06-Feb-2016

8 views 0 download

description

MATEMATICA COMPUTACIONAL

Transcript of Analisis de Tiempos

ALGORITMOS AVANZADOSANÁLISIS DE TIEMPOS

UPC 2010

Agenda

Presentación del Curso. Introducción a los Algoritmos.Introducción a la notación asintótica.Análisis de tiempos con notación O, Ω, θNotación Big O.Otras notacionesEjercicios

Presentación del Curso

Temática del Curso.Esquema de evaluación.

4 Prácticas. 2 Tareas Académicas (Individual). Trabajo Parcial (Individual). Trabajo Final (Grupo 2 personas).

Participación constante.Delegado.Toma de Asistencia.

Logro de la Clase

Conocer los conceptos para analizar los algoritmos en términos de eficiencia.

Introducción a los algoritmos

¿Qué es un algoritmo? Ejemplos

¿Por qué es importante la eficiencia en los algoritmos?

¿Consideraciones a la hora de diseñar un algoritmo? Memoria. Tiempo de Ejecución.

Pasos para diseñar un algoritmo

Casos de Análisis

Análisis de Algoritmos

¿Qué se debe tomar en cuenta? Operaciones de comparación Operaciones aritméticas Asignaciones Otras operaciones (impresiones, lectura,

etc.)Siempre asumimos que el número de

datos es grande.Para el análisis utilizamos Notación

Asintótica

Ejercicios

Calcula el valor de 264. Intente encontrar el menor número de multiplicaciones.

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.

Notaciones

Notación

Símbolo Resumen

Explicación

Big O O(f(n)) Peor Caso

Nos permite evaluar en términos de cotas superiores (upper bounds). Representa lo máximo que demoraría un algoritmo.

Big Omega

Ω(f(n)) Mejor caso

Nos permite evaluar en términos de cotas inferiores (lower bounds). Representa lo mínimo que demoraría un algoritmo.

Big Theta

θ(f(n)) Tight Bounds

Representa cotas exactas (tight bounds). Es decir, sin importar la entrada, el algoritmo siempre crecerá de la misma forma. θ(f(n)) = θ(f(n)) ∩ Ω(f(n))

Reglas Big O

• Regla 1: Ciclos for. for i 1 to n do print i print “hola”Tiempo = 2n ≈ O(n) Lineal

• Regla 2: Ciclos for anidados.

for i 1 to n do for j 1 to n do print “hola”Tiempo =1 * n * n ≈ O(n2) Cuadrático

Reglas Big O

• Regla 3: Condicionales, (Tiempo de la mayor condición)o If cond then

S1Else S2Tiempo = MAX(S1, S2)If a>b then for i 1 to n print i Else print a Tiempo = MAX(n, 1) ≈ O(n)

Reglas Big O

• Regla 4: Proposiciones consecutivas. Sumar

for i 1 to n do print ifor i 1 to n do for j 1 to n do print i * jTiempo = n + 2n2 ≈ O(n2)

Reglas Big O

Regla 5: Tiempos logarítmicos. Se divide el número de elementos por una constante de manera sucesiva.

Reglas para transformar una función en Notación Asintótica

Ejemplo: Hallar el promedio de los números en el array A. Sum 0 n length(A) for i 1 to n do sum sum + A[i] Prom sum / nTiempo muy detallado = 1 + 2 + (2n) + 2 Tiempo asintótico = O(n)

Propiedades Big O

g(n) = O(g(n))c·O(g(n)) = O(g(n)), donde c es una

constanteO(g(n))+O(g(n)) = O(g(n))O(g(n))·O(h(n)) = O(g(n)·h(n)) h(n)·O(g(n)) = O(h(n)·g(n))O(g(n))+O(h(n)) = O del mayorO(g(n))-O(g(n)) = O(g(n))

Ejemplo Gráfico

Tenemos 2 funciones: h(n) = n3 - 12n2 + 20n + 110 k(n) = n3 + n2 + 5n + 5

En los gráficos, se muestra el crecimiento de ambas funciones.

Con valores del 0 al 5

Con valores del 0 al 15

Con valores del 0 al 100

Con valores del 0 al 1000

Otras Notaciones

Notación

Símbolo Resumen

Explicación

Little o o(f(n)) Mayor al Peor caso.

En el peor de los casos, el tiempo que demore el algoritmo será siempre menor a o(f(n)).

Little ω ω (f(n)) Menor al Mejor caso.

En el mejor de los casos, el tiempo que algoritmo nunca será mayor a ω(f(n)).

Resumen de Notaciones

f(n) = o(g(n)) ≈ a < b f(n) = O(g(n)) ≈ a ≤ b f(n) = θ(g(n)) ≈ a = b f(n) = Ω(g(n)) ≈ a ≥ b f(n) = ω(g(n)) ≈ a > b

o(n) > O(n) ≥ θ(g(n)) ≥ Ω(g(n)) > ω(g(n))

Tasas de crecimiento

Función Nombre

c Constante

log(n) Logarítmica

log2(n) Logarítmica cuadrada

n Lineal

n log(n) N log N

n2 Cuadrática

n3 Cúbica

na , a>3 Polinómica de grado “a”

2n Exponencial

n! Factorial

Tasas de crecimiento

Tasas de crecimiento

Tipo de Función# de Instrucciones

(Aprox.)Logarítmica O(log n) 6 Logarítmica cuadrada O(log2 n)

32

Lineal O(n)

50 Linearítmica O( N log n)

282

Cuadrática O(n2) 2,500 Cúbica O(n3) 125,000 Exponencial O(2n) 1.13 x 1015

Factorial O(n!) 3.04 x 1064

Tasas de crecimiento

Para n = 50

Ejercicios

Analizar O(n) para:Ejercicio 1:

sum 0for i 1 to n do

sum sum +1

Ejercicio 2:sum 0for i 1 to n do

for j 1 to i dosum sum +1

Ejercicios

Analizar O(n) para:Ejercicio 3:

sum 0

for i 1 to n do

for j 1 to i * 2 do sum sum +1

Ejercicio 4:sum 0

for i 1 to n do

for j 1 to 5 dosum sum +1

Ejercicios

Analizar O(n) para:Ejercicio 5:

sum 0

if (a > b)

for i 1 to n dosum sum +1

else

for i 1 to n dofor j 1 to i do

sum sum +1

Ejercicios

Implementar in algoritmo de búsqueda binaria y luego realizar el análisis asintótico O(n)

Bibliografía

Cormen, Thomas H. and Others. Introduction to Algorithms, Second Edition. 2001.

Jeffrey J. McConnell. Analysis of Algorithms: An Active Learning Approach. 2001

Weiss, Mark Allen. Estructura de Datos y Algoritmos. 1995.