1 / 23

Complejidad

Complejidad. Programación II 10-11 de febrero de 2009. Eficiencia de algoritmos. ¿Cómo determinar si un algoritmo es mejor que otro? Fácil a implementar Fácil a entender Fácil a modificar Usa menos memoria Menor tiempo de ejecución. Tiempo de ejecución.

theodora
Download Presentation

Complejidad

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Complejidad Programación II 10-11 de febrero de 2009

  2. Eficiencia de algoritmos • ¿Cómo determinar si un algoritmo es mejor que otro? • Fácil a implementar • Fácil a entender • Fácil a modificar • Usa menos memoria • Menor tiempo de ejecución

  3. Tiempo de ejecución • El tiempo de ejecución de un programa depende de varios factores: • Los datos de entrada • La calidad del código generado por el compilador • La máquina donde se ejecuta el programa • La complejidad del algoritmo en que se basa

  4. Complejidad • Complejidad: número de operaciones elementales en función de la entrada • Si n es la medida de los datos de entrada, T(n) denota el tiempo de ejecución • T(n) no tiene unidad • Hace referencia al caso peor (otras opciones: caso promedio, caso mejor)

  5. Operaciones elementales • Operaciones aritméticas (adición, sustracción, multiplicación, división, módulo) • Asignación de valores a una variable • Comparaciones • Devolución del resultado

  6. Composición de la complejidad • Secuencia: la complejidad se suma • Condicional: la complejidad en el caso peor es el máximo de las dos opciones • Bucles: la complejidad es el producto del número de iteraciones y la complejidad interior del bucle (incluida la condición)

  7. Ejemplo: Factorial • Calcular T(n) para la versión iterativa de Factorial(n) funcion Factorial(n:natural) devuelvenatural resultado := 1; mientras (n > 0) hacer resultado := resultado * n; n := n – 1; fmientras devuelve resultado; ffuncion

  8. Notación asintótica • Mide la velocidad de crecimiento de una función • Una función T(n) es O(f(n)) (O-grande de f(n)) si T(n) crece como f(n) • Por ejemplo, la función T(n) = 5n + 3 es O(n), es decir, crece como n • En general, es igual al término más grande (constantes excluidos)

  9. Definición matemática O(f(n)) = {T(n) : c,N, n>N, T(n) < c*f(n)} c*f(n) T(n) f(n) N n

  10. Funciones típicas

  11. Velocidad de crecimiento

  12. Ejemplo: ordenación • Complejidad en notación asintótica de los algoritmos de ordenación básicos • Algoritmo de la burbuja (Bubble Sort) • Ordenación por inserción (Insertion Sort) • Ordenación por selección (Selection Sort)

  13. Doble bucle • ¿Cuál es la complejidad de la suma 1+2+3+…+n? • Ejemplo del Principio de Inducción: 1+2+3+…+n = n(n+1)/2 • ¿Notación asintótica?

  14. Funciones recursivas • Establecer la ecuación de recurrencia: • Complejidad en el caso base • Complejidad en el caso recursivo • Expandir la complejidad en el caso base en función del número de llamadas recursivas hechas • Encontrar el número de llamadas necesarias para estar en el caso base

  15. Ejemplo: Factorial • Ecuación de recurrencia: • T(n) = a, n = 0 • T(n) = b + T(n-1), n > 0 • Expandir en el caso recursivo:

  16. Ejemplo: Factorial • T(n) = kb + T(n-k) • Para eliminar la dependencia de T(), escoger k tal que estamos en el caso base • Si k=n, T(n-k) = T(0) = a • Si substituimos k=n en la expresión, obtenemos T(n) = bn + a • ¿Notación asintótica?

  17. Ejemplo: Búsqueda binaria funcion BB(V:vector; i,d,k:natural) devuelvebooleano si (i = d) entonces devuelve (V[i] = k); sinosi (V[(i+d)/2] < k) entonces devuelve BB(V, (i+d)/2 + 1, d, k); sino devuelve BB(V, i, (i+d)/2, k); fsi ffuncion

  18. Ejemplo: Búsqueda binaria • Ecuación de recurrencia (medida n=d – i): • T(n) = a, n = 0 • T(n) = b + T(n/2), n > 0 • Expandir en el caso recursivo:

  19. Ejemplo: Búsqueda binaria • T(n) = kb + T(n/2k) • Para eliminar la dependencia de T(), escoger k tal que estamos en el caso base • Problema: n/2k = 0 => 2k =  • Idea: escoger n/2k = 1  k = log(n) • T(n) = b*log(n) + T(1) = b*log(n) + b + a • ¿Notación asintótica?

  20. Ejemplo: Mergesort • Medida: n = D – E • Depende de la complejidad de Combina • Los bucles de Combina se repiten un número de veces igual al número total de elementos de V1 y V2 • Ecuación de recurrencia: • T(n) = a, n = 0 • T(n) = b + c*n + 2T(n/2)

  21. Ejemplo: Mergesort • n/2k = 1  k = log(n) • T(n) = bn + cnlog(n) + an • ¿Notación asintótica?

  22. Un experimento • Ordenar mil millones de elementos • Procesador con frecuencia 1GHz • Tiempo de ejecución aproximado • Bubble (Insertion, Selection) Sort: O(n2) • Mergesort: O(nlog(n)) • log(109)  30 • 109 segundos  ¡32 años!

  23. Ejemplo: Quicksort • Caso mejor: como Mergesort • Caso peor: ¡como Bubble Sort! • Caso promedio: como Mergesort

More Related