Análisis de Algoritmos

42
1 Análisis y Análisis y Complejidad de Complejidad de Algoritmos Algoritmos Se introducen los conceptos de complejidad de algoritmos y se exponen las más usuales metodologías para calcular complejidades.

description

Algoritmos

Transcript of Análisis de Algoritmos

Page 1: 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.

Page 2: Análisis de Algoritmos

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

Page 3: Análisis de Algoritmos

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.

Page 4: Análisis de Algoritmos

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.

Page 5: Análisis de Algoritmos

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.

Page 6: Análisis de Algoritmos

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

Page 7: Análisis de Algoritmos

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.

Page 8: Análisis de Algoritmos

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)

Page 9: Análisis de Algoritmos

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)

Page 10: Análisis de Algoritmos

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

Page 11: Análisis de Algoritmos

1111

Page 12: Análisis de Algoritmos

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

Page 13: Análisis de Algoritmos

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

Page 14: Análisis de Algoritmos

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

Page 15: Análisis de Algoritmos

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

Page 16: Análisis de Algoritmos

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”==========================================================

Page 17: Análisis de Algoritmos

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

Page 18: Análisis de Algoritmos

1818

Análisis de AlgoritmosAnálisis de Algoritmos

Qué es Complejidad?.

Ordenes de Complejidad.

Complejidad de instrucciones básicas.

Algunos problemas clásicos.

Page 19: Análisis de Algoritmos

1919

Análisis de AlgoritmosAnálisis de Algoritmos

Qué es Complejidad?.

Ordenes de Complejidad.

Complejidad de instrucciones básicas.

Un problema clásico.

Page 20: Análisis de Algoritmos

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?

Page 21: Análisis de Algoritmos

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

Page 22: Análisis de Algoritmos

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.

Page 23: Análisis de Algoritmos

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

Page 24: Análisis de Algoritmos

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

Page 25: Análisis de Algoritmos

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!

Page 26: Análisis de Algoritmos

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

Page 27: Análisis de Algoritmos

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

Page 28: Análisis de Algoritmos

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];

Page 29: Análisis de Algoritmos

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

Page 30: Análisis de Algoritmos

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

Page 31: Análisis de Algoritmos

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.

Page 32: Análisis de Algoritmos

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.

Page 33: Análisis de Algoritmos

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

Page 34: Análisis de Algoritmos

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.

Page 35: Análisis de Algoritmos

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

Page 36: Análisis de Algoritmos

3636

Análisis de AlgoritmosAnálisis de Algoritmos

Qué es Complejidad?.

Ordenes de Complejidad.

Complejidad de instrucciones básicas.

Un problema clásico.

Page 37: Análisis de Algoritmos

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

Page 38: Análisis de Algoritmos

3838

Ordenes de ComplejidadOrdenes de Complejidad

Establecer la complejidad precisa es difícil….

…entonces se estudia el comportamiento asintótico.

Page 39: Análisis de Algoritmos

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.

Page 40: Análisis de Algoritmos

4040

Análisis de AlgoritmosAnálisis de Algoritmos

Qué es Complejidad?.

Ordenes de Complejidad.

Complejidad de instrucciones básicas.

Un problema clásico.

Page 41: Análisis de Algoritmos

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)

Page 42: Análisis de Algoritmos

4242

Complejidad de SORTComplejidad de SORT

Sort Burbuja es O(n2).

Sort por Fusión es O(n log n)…