Análisis de Algoritmos
-
Upload
ing-david-rodriguez -
Category
Documents
-
view
13 -
download
0
description
Transcript of Análisis de Algoritmos
11
Análisis y Complejidad Análisis y Complejidad de Algoritmosde Algoritmos
Se introducen los conceptos de complejidad de algoritmos y se exponen las más usuales metodologías para calcular complejidades.
22
AlgoritmiaAlgoritmiaDiseño de métodos para resolver problemasDiseño de métodos para resolver problemas
Tenemos una descripción de los datos del problema (entradas, Tenemos una descripción de los datos del problema (entradas, especificación del resultado deseado)especificación del resultado deseado)
Describimos los métodos para resolver problema Describimos los métodos para resolver problema algoritmosalgoritmos Demostramos que los métodos corresponden al problemaDemostramos que los métodos corresponden al problema
Complejidad de los métodosComplejidad de los métodos22 Eficiencia: tiempo de cálculo, espacio en memoria ocupadaEficiencia: tiempo de cálculo, espacio en memoria ocupada
RealizaciónRealización Organización de los datos Organización de los datos Selección de una estructuraSelección de una estructura ImplementaciónImplementación
33
AlgoritmoAlgoritmo
Histórico: Histórico: el termino el termino algoritmoalgoritmo proviene de proviene de Al Al KhowarizmiKhowarizmi, matemático árabe del IX° siglo, matemático árabe del IX° siglo
El libro de Al Khowarizmi constitue la base de la notación El libro de Al Khowarizmi constitue la base de la notación decimal moderna.decimal moderna.
Al inicio, la palabra “Al inicio, la palabra “algrismoalgrismo” significaba las reglas necesarias ” significaba las reglas necesarias para efectuar cálculos aritméticos utilizando la notación decimal.para efectuar cálculos aritméticos utilizando la notación decimal.
El término El término algoritmoalgoritmo aparece en el siglo XVII. aparece en el siglo XVII.
44
Algoritmo Algoritmo
Definición: Definición: Conjunto de reglas operativas, su aplicación Conjunto de reglas operativas, su aplicación permite resolver un problema dado por medio de permite resolver un problema dado por medio de un número finito de operaciones.un número finito de operaciones.
Especificación de esquema de cálculo en forma Especificación de esquema de cálculo en forma de una secuencia de operaciones elementales de una secuencia de operaciones elementales ordenada, finita y precisa. ordenada, finita y precisa.
55
AlgoritmoAlgoritmo
Propiedades:Propiedades:Las entradas: un algoritmo toma valores de entrada en Las entradas: un algoritmo toma valores de entrada en un conjunto definido.un conjunto definido.La salida: es la solución del problema inicialLa salida: es la solución del problema inicial FinitudFinitud: el algoritmo debe producir la salida deseada en : el algoritmo debe producir la salida deseada en
un número finito de pasos, con la entrada que sea.un número finito de pasos, con la entrada que sea. EficienciaEficiencia: cada paso del algoritmo debe ejecutarse en un : cada paso del algoritmo debe ejecutarse en un
tiempo finito.tiempo finito. GeneralidadGeneralidad: el algoritmo se aplica a todos los problemas : el algoritmo se aplica a todos los problemas
de una forma deseada.de una forma deseada.
66
Complejidad en tiempoComplejidad en tiempo
La mayoría de los algoritmos transforman entradas en La mayoría de los algoritmos transforman entradas en una salida.una salida.La complejidad en tiempo de un algoritmo es función del La complejidad en tiempo de un algoritmo es función del tamaño de las entradastamaño de las entradasLa complejidad mediana es difícil de obtener en generalLa complejidad mediana es difícil de obtener en generalMás bien se estudia la complejidad en lo peor de los Más bien se estudia la complejidad en lo peor de los casos:casos:
más fácil de analizarmás fácil de analizar crucial en muchas aplicaciones:crucial en muchas aplicaciones: juegos, finanzas..juegos, finanzas..
77
Método 1: Análisis experimentalMétodo 1: Análisis experimental
Implementar el algoritmo en JavaImplementar el algoritmo en Java
Ejecutar el programa con muchas entradas y de Ejecutar el programa con muchas entradas y de composición diferentecomposición diferente
Utilizar un método como Utilizar un método como System.currentTimeMillis() System.currentTimeMillis() para obtener una medida para obtener una medida real del tiempo de ejecución real del tiempo de ejecución
Dibujar una gráfica (tamaño, tiempo) de los resultados.Dibujar una gráfica (tamaño, tiempo) de los resultados.
88
Limitación del métodoLimitación del método
Se debe implementar el algoritmoSe debe implementar el algoritmoSe requiere calcular la complejidad antes de la implementación para Se requiere calcular la complejidad antes de la implementación para ahorrar tiempo y $$$ahorrar tiempo y $$$
Los resultados encontrados no son representativos de Los resultados encontrados no son representativos de todas las entradastodas las entradas
Para comparar 2 algoritmos diferentes del mismo Para comparar 2 algoritmos diferentes del mismo problema, debemos utilizar el mismo ambienteproblema, debemos utilizar el mismo ambiente(hardware y software)(hardware y software)
99
Método 2: Análisis Teórico Método 2: Análisis Teórico
Se hace a partir del seudo código del algoritmo y no de Se hace a partir del seudo código del algoritmo y no de la implementaciónla implementación
Describe el tiempo de ejecución como una función de n, Describe el tiempo de ejecución como una función de n, el tamaño de la entradael tamaño de la entrada
Toma en consideración todas las entradasToma en consideración todas las entradas
Independiente del ambiente (SW, HD)Independiente del ambiente (SW, HD)
1010
Varias funciones importantesVarias funciones importantes
Función constante, f (n) = 1Función constante, f (n) = 1Función lineal, f (n) = nFunción lineal, f (n) = nFunción logarítmica, f (n) = log (n) Función logarítmica, f (n) = log (n) Función cuadrática, f (n) = nFunción cuadrática, f (n) = n22
Función cúbica, f (n) = nFunción cúbica, f (n) = n3 3
Función polinomial, f (n) = nFunción polinomial, f (n) = n22 + n + 1 + n + 1Función exponencial, f (n) = 2Función exponencial, f (n) = 2nn
1111
1212
Orden de crecimientoOrden de crecimiento
f(n) = nf(n) = n22 + 100 n + log + 100 n + log1010 n + 1000 n + 1000
n f(n)valor valor % valor % valor % valor %
1 1,101 1 0.09% 100 9.083% 0 0.00% 1,000 90.827%10 2,101 100 4.76% 1,000 47.596% 1 0.05% 1,000 47.596%
100 21,002 10,000 47.61% 10,000 47.615% 2 0.01% 1,000 4.761%1,000 1,101,003 1,000,000 90.83% 100,000 9.083% 3 0.00% 1,000 0.091%
10,000 101,001,004 100,000,000 99.01% 1,000,000 0.990% 4 0.00% 1,000 0.001%100,000 10,010,001,005 10,000,000,000 99.90% 10,000,000 0.100% 5 0.00% 1,000 0.000%
n2 100n log10n 1000
1313
¿Cuándo decimos que un algoritmo es bueno?¿Cuándo decimos que un algoritmo es bueno?
Armemos esta tabla..... Armemos esta tabla..... (los tiempos están dados en segundos y los (los tiempos están dados en segundos y los algoritmos corren en la misma máquina)algoritmos corren en la misma máquina)
10 20 30 40 50 60 n 0.00001 0.00002 0.00003 0.00004 0.00005 0.00006
n2
n3
n5
2n
3n
1414
La tabla queda así …..(los tiempos están dados en segundos salvo cuando dice otra cosa)
10 20 30 40 50 60 n 0.00001 0.00002 0.00003 0.00004 0.00005 0.00006
n2 0.0001 0.0004 0.0009 0.0016 90.0025 0.0036
n3 0.001 0.008 0.027 0.064 0.125 0.216
n5 0.1 3.2 24.3 1.7 min 5.2 min 13.0 min
2n 0.001 1.0 17.9min 12.7días 35.6 años 366 siglos
3n 0.59 58 min 6.5años 3855siglos 2 E+8 siglos 1.3 E+13 siglos
1515
Los datos de la tabla anterior corresponden a una máquina Los datos de la tabla anterior corresponden a una máquina muy vieja (1979).muy vieja (1979).¿¿Qué pasa si tenemos una máquina 1000 veces más rápida?. Un Qué pasa si tenemos una máquina 1000 veces más rápida?. Un millón de veces más rápida?. millón de veces más rápida?. ¿Cuál sería el tamaño del problema que podemos resolver en una ¿Cuál sería el tamaño del problema que podemos resolver en una hora comparado con el problema que podemos resolver ahora?.hora comparado con el problema que podemos resolver ahora?.
actual computadora 1000 veces más rápida n N1 1000 N1 n2 N2 31.6 N2
n3 N3 10 N3
n5 N4 3.98 N4
2n N5 N5 + 9.97
3n N6 N6 + 6.29
1616
¿Cuándo diremos entonces que un algoritmo es bueno?.¿Cuándo diremos entonces que un algoritmo es bueno?.
Cuándo un algoritmo es suficientemente eficiente para ser Cuándo un algoritmo es suficientemente eficiente para ser usado en la práctica?usado en la práctica?
==========================================================POLINOMIAL = “bueno”POLINOMIAL = “bueno”EXPONENCIAL = “malo”EXPONENCIAL = “malo”==========================================================
1717
¿Qué pasa si tengo complejidades como las ¿Qué pasa si tengo complejidades como las siguientes?:siguientes?:
n n 8080
1.0011.001nn
esto no ocurre en la práctica
1818
Análisis de AlgoritmosAnálisis de Algoritmos
Qué es Complejidad?.
Ordenes de Complejidad.
Complejidad de instrucciones básicas.
Algunos problemas clásicos.
1919
Análisis de AlgoritmosAnálisis de Algoritmos
Qué es Complejidad?.
Ordenes de Complejidad.
Complejidad de instrucciones básicas.
Un problema clásico.
2020
ComplejidadComplejidad
¿Cómo se mide la complejidad?¿Cómo se mide la complejidad?
¿La complejidad está asociada a un ¿La complejidad está asociada a un problema o a una solución del problema?problema o a una solución del problema?
¿La complejidad depende de la ¿La complejidad depende de la implementación?implementación?
2121
ComplejidadComplejidad
¿Qué se entiende por complejidad?¿Qué se entiende por complejidad?
La Complejidad es una medida de la La Complejidad es una medida de la cantidad que consume un algoritmo de un cantidad que consume un algoritmo de un recurso determinado.recurso determinado.
En general hablamos de Complejidad En general hablamos de Complejidad EspacialEspacial o Complejidad o Complejidad TemporalTemporal..
2222
ComplejidadComplejidad
Problema: Problema: Pregunta sobre un conjunto de datos. Pregunta sobre un conjunto de datos.
Solución: Solución: Método general para resolver todas las Método general para resolver todas las posibles preguntas. posibles preguntas.
2323
ComplejidadComplejidad
Problema: Problema: XX = { (p (x), r (x)) | x = { (p (x), r (x)) | x D }. D }.
Solución: Solución: Es una relación A: P Es una relación A: P R tal R tal que para cada pregunta que para cada pregunta posible p, (p, A (p)) posible p, (p, A (p)) XX. .
Para un problema Para un problema XX existen preguntas más existen preguntas más difíciles de resolver o más grandes que otras. difíciles de resolver o más grandes que otras.
Conjunto de pares de preguntas respuestas
2424
ComplejidadComplejidad
Problema: Problema: XX = { ((a, k),i) | a=A [0..n-1] = { ((a, k),i) | a=A [0..n-1] 0 0 ≤ i ≤ n-1 ≤ i ≤ n-1 a [i] = ka [i] = k}.}.
Solución: Solución: Algoritmo de Búsqueda Lineal.Algoritmo de Búsqueda Lineal.
BL responde preguntas fáciles y preguntas BL responde preguntas fáciles y preguntas difíciles difíciles (¿de qué depende la dificultad?).(¿de qué depende la dificultad?).
2525
ComplejidadComplejidad
Si el recurso es Si el recurso es espacioespacio: : Cantidad de memoria requerida para una ejecución. Cantidad de memoria requerida para una ejecución.
Si el recurso es Si el recurso es tiempotiempo: : Cantidad de tiempo requerido para una ejecución. Cantidad de tiempo requerido para una ejecución.
n + 2n + 2. .
depende!depende!
2626
Complejidad en TiempoComplejidad en TiempoT (algo, d) = T (algo, d) = tiempo de ejecución del algoritmo algo aplicado sobre los datos dComplejidad en el peor caso:
TMAX (algo, n) = max {T(algo, d), d de tamaño n}
Complejidad en el mejor caso: TMIN (algo, n) = min {T(algo, d), d de tamaño n}
Complejidad mediana: TMED (algo, n) = ∑ p(d) T(algo, d)
d
p(d)= probabilidad de tener el caso d
2727
Operaciones elementalesOperaciones elementales
Operaciones básicas efectuadas por el Operaciones básicas efectuadas por el algoritmo, ejemplo:algoritmo, ejemplo: Evaluar una expresiónEvaluar una expresión Asignar un valor a una variableAsignar un valor a una variable Mandar a llamar a un métodoMandar a llamar a un método …………. Etc.. Etc.Independientes del lenguaje de programación Independientes del lenguaje de programación utilizadoutilizadoConsideramos que tienen un tiempo de Consideramos que tienen un tiempo de ejecución constanteejecución constante
2828
Ejercicio de conteoEjercicio de conteo
¿Cuántas veces se repite el ciclo?¿Cuántas veces se repite el ciclo?For (int i = 0; i < 10; i++)For (int i = 0; i < 10; i++)
suma = suma + A[i];suma = suma + A[i];
For (int i = 0; i < 10; i++)For (int i = 0; i < 10; i++) For (int j = 0; j < 20; j++) For (int j = 0; j < 20; j++) suma = suma + B[i][j];suma = suma + B[i][j];
2929
Contar las operaciones básicasContar las operaciones básicas
Fijándonos en el seudo código del algoritmo, podemos Fijándonos en el seudo código del algoritmo, podemos determinar el número máximo de operaciones determinar el número máximo de operaciones elementales ejecutadas por el algoritmo, como una elementales ejecutadas por el algoritmo, como una función del tamaño de la entradafunción del tamaño de la entradaAlgo MaxArr (A, n)Algo MaxArr (A, n) max max A[0] A[0] for for i i 1 to n -1 hacer 1 to n -1 hacer if if (A[i] > max) (A[i] > max) max max A[i] A[i] i++i++
return maxreturn max
3030
Contar las operaciones básicasContar las operaciones básicasFijándonos en el seudo código del algoritmo, podemos determinar el Fijándonos en el seudo código del algoritmo, podemos determinar el número máximo de operaciones elementales ejecutadas por el número máximo de operaciones elementales ejecutadas por el algoritmo, como una función del tamaño de la entradaalgoritmo, como una función del tamaño de la entrada
Algo MaxArr (A, n)Algo MaxArr (A, n) # operaciones# operacionesmax max A[0] A[0] 22for i for i 1 to n-1 hacer 1 to n-1 hacer 2n-12n-1if (A[i] > max) if (A[i] > max) 2(n-1)2(n-1) max max A[i] A[i] 2(n-1)2(n-1)i++i++ 2(n-1)2(n-1)return maxreturn maxTotal Total 8n-58n-5
3131
Estimación del tiempoEstimación del tiempoEl algoritmo MaxArr ejecuta 8n-5 operaciones El algoritmo MaxArr ejecuta 8n-5 operaciones elementales en el peor de los casoselementales en el peor de los casos;; considerando:considerando:
a= a= tiempo de ejecución mas rápido de una operación elementaltiempo de ejecución mas rápido de una operación elemental
b= b= tiempo de ejecución mas lento de una operación elementaltiempo de ejecución mas lento de una operación elemental
Sea T(n) la complejidad en el peor caso de Sea T(n) la complejidad en el peor caso de MaxArr, entonces MaxArr, entonces
a(8n-5) a(8n-5) ≤≤ T(n)T(n) ≤≤ b(8n-5) b(8n-5)Entonces el tiempo de ejecución está limitado Entonces el tiempo de ejecución está limitado por 2 funciones.por 2 funciones.
3232
ComplejidadComplejidad
Búsqueda en un arregloBúsqueda en un arreglo: :
{Pre Q: a=Arr [0..n-1] {Pre Q: a=Arr [0..n-1] x=X} x=X}i = 0;i = 0;dodo (i (i ≠ n ≠ n arr[i]≠x) arr[i]≠x) i = i+1 i = i+1 od;od;
{Pos R: (i=n {Pos R: (i=n X XArr) Arr) (0≤ i <n (0≤ i <n Arr[i]=X)} Arr[i]=X)}
Operación básica: Comparación.Operación básica: Comparación.
Si X está en la posición k: Si X está en la posición k: k +1k +1 comparaciones. comparaciones.Si X no está en Arr: Si X no está en Arr: nn comparaciones. comparaciones.
3333
ComplejidadComplejidad
Búsqueda en un arregloBúsqueda en un arreglo: :
TTBLI BLI (n) = n(n) = n en el peor caso.en el peor caso.
TTBLI BLI (n) = n – (n) = n – aa (n+1)/2 (n+1)/2 en el caso promedio.en el caso promedio.
a es la probabilidad que el valor buscado esté en el arreglo
3434
ComplejidadComplejidad
Búsqueda en un arregloBúsqueda en un arreglo: :
TTBLI BLI (n) = n – a(n+1)/2(n) = n – a(n+1)/2 en el caso promedio.en el caso promedio.
3535
ComplejidadComplejidad
Búsqueda en un arregloBúsqueda en un arreglo: :
TTBLI BLI (n) = n – a(n+1)/2(n) = n – a(n+1)/2 en el caso promedio.en el caso promedio.Casos interesantes:Casos interesantes:
X X A A a = 1 : T a = 1 : TBLI BLI (n) = (n+1)/2(n) = (n+1)/2
a = ½ : Ta = ½ : TBLI BLI (n) (n) 3n/4 3n/4
X X A A a = 0 : T a = 0 : TBLI BLI (n) = n(n) = n
3636
Análisis de AlgoritmosAnálisis de Algoritmos
Qué es Complejidad?.
Ordenes de Complejidad.
Complejidad de instrucciones básicas.
Un problema clásico.
3737
Ordenes de ComplejidadOrdenes de Complejidad
Algoritmo 1 : T1(n) = 1000 n
Algoritmo 2 : T2(n) = 200 n log n
Algoritmo 3 : T3(n) = 10 n2
Algoritmo 4 : T4(n) = 2n
1 9 100
2 4 3 1
3838
Ordenes de ComplejidadOrdenes de Complejidad
Establecer la complejidad precisa es difícil….
…entonces se estudia el comportamiento asintótico.
3939
Ordenes de ComplejidadOrdenes de Complejidad
n
T
k
De k en adelante un múltiplo de f es superior a g y otro múltiplo de f es inferior a g.
4040
Análisis de AlgoritmosAnálisis de Algoritmos
Qué es Complejidad?.
Ordenes de Complejidad.
Complejidad de instrucciones básicas.
Un problema clásico.
4141
Complejidad de Instrucciones Complejidad de Instrucciones BásicasBásicas
for (i = 0; i<n ; i ++ ) { for (j = 0, j<n; j ++) { if a[j-1] > a[j] { temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; } fi rofrof
O(1)
O(1)O(n-1-i)
O(n2)
4242
Complejidad de SORTComplejidad de SORT
Sort Burbuja es O(n2).
Sort por Fusión es O(n log n)…