13 Notación asintótica Objetivo: simplificar el análisis eliminando la información innecesaria (como "redondeo" 1,000,001~1,000,000) Queremos decir de manera formal 3n2 ~ n2 Notación "O-grande (Big-Oh)": dadas las funciones f(n) and g(n), decimos que f(n) es O(g(n) ) si y solo si hay constantes positivas c y n0 tal que f(n)= c g(n) para n = n0
14 Notación asintótica: ejemplo Para funciones f(n) y g(n) (derecha) hay constantes positivas c y n0 tales que: f(n)=c g(n) for n = n0
conclusión: 2n+6 is O(n).
15 Notación asintótica: ejemplo Otro caso. n2 no es O(n) debido a que no hay c y n0 tal que: n2 = cn para n = n0
(como se ve en el gráfico, no importa cuan grande se escoge c hay un n suficientemente grande que n2>cn ) .
16 Notación asintótica Nota: Aun cuando es correcto decir que "7n – 3 es O(n3)", es mejor decir "7n – 3 es O(n)", esto es, se debe hacer la aproximación lo más cerca posible
Regla simple: Eliminar los términos de bajo orden y las constantes 7n-3 es O(n) 8n2log n + 5n2 + n es O(n2log n)
17 Notación asintótica (terminología) Clases especiales de algoritmos: logaritmico: O(log n) lineal: O(n) cuadratico: O(n2) polinomico: O(nk), k = 1 exponencial: O(an), n > 1
"Alternativos" de Big-Oh ? (f(n)): Big Omega– cota inferior asintótica ? (f(n)): Big Theta– cota promedio asintótica
18 Tiempo de ejecución Usar la notación Big-Oh para expresar el número de operaciones primitivas ejecutadas como función del tamaño de entrada. Ejemplo: decimos que el algoritmo arrayMax se ejecuta en tiempo O(n). Comparación de tiempos de ejecución asintóticos – un algoritmo que corre en tiempo O(n) es mejor que uno que corre en tiempo O(n2) – de forma similar, O(log n) es mejor que O(n) – jerarquía de funciones: log n < < n < < n2 < < n3 < < 2n Cuidado! Con los factores constantes muy grandes. Un algoritmo que corre en tiempo 1,000,000 n todavía es O(n) pero puede ser menor eficiente para un conjunto de datos que uno que corre en tiempo 2n2, que es O(n2)
19 Ejemplo de análisis asintótico Algoritmo para calcular promedios prefijos:
Algorithm prefixAverages1(X): Input: Array X de números de n-elementos. Output: Array A de números de n -elementos tal que A[i] es el promedio de los elementos X[0], … , X[i]. Sea A un array de n números. for i? 0 to n – 1 do a ? 0 for j ? 0 to i do a ? a + X[j] A[i] ? a/(i+ 1) return array A Análisis: O(n2)
20 Ejemplo de análisis asintótico Otro algoritmo para calcular promedios prefijos: A[i-1] = (X[0] + X[1] +…+ X[i-1])/i A[i] = (X[0] + X[1] +…+ X[i-1] + X[i])/(i+1) Algorithm prefixAverages2(X): Input: Array X de números de n-elementos. Output: Array A de números de n -elementos tal que A[i] es el promedio de los elementos X[0], … , X[i]. Sea A un array de n números. s? 0 for i ? 0 to n do s ? s + X[i] A[i] ? s/(i+ 1) return array A Análisis: O(n)
21 Complejidad en la práctica Considerando 109 instrucciones/segundo
22 Análisis de algoritmos recursivos Algorithm recursiveMax(A, n): Input: Un array A que almacena n enteros. Output: El máximo elemento en A. if n = 1 then return A[0] return max {recursiveMax(A, n-1), A[n-1] } Se usan ecuaciones de recurrencia
3 si n = 1 T(n) = T(n-1) + 7 en otro caso
Forma cerrada: T(n) = 7(n-1) + 3
23 Elementos matemáticos Sumatorios y series Logaritmos y exponentes propiedades de logaritmos: logb(xy) = logbx + logby logb (x/y) = logbx – logby logbxa = alogbx logba= logxa/logxb propiedades de exponenciales: a(b+c) = aba c abc = (ab)c ab /ac = a(b-c) b = a logab bc = a c*logab Funciones especiales Floor: ?x? = el mayor entero = x Ceiling: ?x? = el menor entero = x
24 Elementos matemáticos Técnicas de justificación (demostración) Ejemplo y contraejemplo Contrapositivo y Contradicción Inducción Invariantes de bucle Probabilidades (algoritmos que usan random o análisis de rendimiento promedio de un algoritmo)
25 Otras técnicas Amortización Método contable Funciones potenciales Experimentación Configuración Selección de la cuestión Decisión de lo que va a medir (Referencias a memoria, Comparaciones, Operaciones aritméticas) Generación de los datos de prueba Codificación de la solución y realización del experimento Análisis de datos y visualización La prueba del cociente La prueba de potencia
Página anterior | Volver al principio del trabajo | Página siguiente |