Analisis de Tiempos
description
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.