La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Complejidad Programación II de febrero de 2009.

Presentaciones similares


Presentación del tema: "Complejidad Programación II de febrero de 2009."— Transcripción de la presentación:

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) devuelve natural 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 n T(n) f(n) c*f(n) N O(f(n)) = {T(n) :  c,N,  n>N, T(n) < c*f(n)}

10 Funciones típicas Velocidad de crecimientoNombre de la función O(1)constante O(log(n))logarítmica O(n)lineal O(nlog(n))casi lineal O(n 2 )cuadrática O(n k )polinómica O(2 n )exponencial

11 Velocidad de crecimiento n101001000 kkkk log(n)3610 n 1001000 nlog(n)3060010000 n2n2 100100001000000 n3n3 1000100000010 9 2n2n 100010 30 10 300

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: Llamadas recursivasT(n) 1b + T(n-1) 22b + T(n-2) kkb + T(n-k)

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) devuelve booleano si (i = d) entonces devuelve (V[i] = k); sino si (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: Llamadas recursivasT(n) 1b + T(n/2) 22b + T(n/4) kkb + T(n/2 k )

19 Ejemplo: Búsqueda binaria T(n) = kb + T(n/2 k ) Para eliminar la dependencia de T(), escoger k tal que estamos en el caso base Problema: n/2 k = 0 => 2 k =  Idea: escoger n/2 k = 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 V 1 y V 2 Ecuación de recurrencia: – T(n) = a, n = 0 – T(n) = b + c*n + 2T(n/2)

21 Ejemplo: Mergesort n/2 k = 1  k = log(n) T(n) = bn + cnlog(n) + an ¿Notación asintótica? LlamadasT(n) 1b + cn + 2T(n/2) 23b + 2cn + 4T(n/4) k(2 k -1)b + kcn + 2 k T(n/2 k )

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

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


Descargar ppt "Complejidad Programación II de febrero de 2009."

Presentaciones similares


Anuncios Google