Descargar

Análisis de algoritmos (página 2)

Enviado por Pablo Turmero


Partes: 1, 2
edu.red

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

edu.red

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).

edu.red

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 ) .

edu.red

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)

edu.red

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

edu.red

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)

edu.red

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)

edu.red

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)

edu.red

21 Complejidad en la práctica Considerando 109 instrucciones/segundo

edu.red

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

edu.red

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

edu.red

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)

edu.red

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

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente