Analisis de Algoritmos.pptx

  • Upload
    alonso

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Diapositiva 1

1Anlisis y Complejidad de AlgoritmosObjetivo:

Se introducen los conceptos de complejidad de algoritmos y se exponen las ms usuales metodologas para calcular complejidades.

12AlgoritmiaDiseo de mtodos para resolver problemasTenemos una descripcin de los datos del problema (entradas, especificacin del resultado deseado)Describimos los mtodos para resolver problema algoritmosDemostramos que los mtodos corresponden al problema

Complejidad de los mtodosEficiencia: tiempo de clculo, espacio en memoria ocupada

Realizacin (implementacin)Organizacin de los datos Seleccin de una estructuraImplementacin23AlgoritmoHistoria: el termino algoritmo proviene de Al Khowarizmi, matemtico rabe del IX siglo

El libro de Al Khowarizmi constituye la base de la notacin decimal moderna.

Al inicio, la palabra algrismo significaba las reglas necesarias para efectuar clculos aritmticos utilizando la notacin decimal.

El trmino algoritmo aparece en el siglo XVII.

34Algoritmo Definicin: Conjunto de reglas operativas, su aplicacin permite resolver un problema dado por medio de un nmero finito de operaciones.

Especificacin de esquema de clculo en forma de una secuencia de operaciones elementales ordenada, finita y precisa.

45Algoritmo Propiedades:Las entradas: un algoritmo toma valores de entrada en un conjunto definido.La salida: es la solucin del problema inicialFinitud: el algoritmo debe producir la salida deseada en un nmero finito de pasos, con la entrada que sea.Eficiencia: cada paso del algoritmo debe ejecutarse en un tiempo finito y aceptable.Generalidad: el algoritmo se aplica a todos los problemas similares de una forma deseada.56Complejidad en tiempoLa mayora de los algoritmos transforman entradas en una salida.La complejidad en tiempo de un algoritmo es funcin del tamao de las entradasLa complejidad mediana es difcil de obtener en generalMs bien se estudia la complejidad en lo peor de los casos:ms fcil de analizarcrucial en muchas aplicaciones: juegos, finanzas, sw crtico..

Hay 2 mtodos para medir la complejidad:67Mtodo 1: Anlisis experimentalImplementar el algoritmo en Java

Ejecutar el programa con muchas entradas y de composicin diferente

Utilizar un mtodo como System.currentTimeMillis() para obtener una medida real del tiempo de ejecucin

Dibujar una grfica (tamao, tiempo) de los resultados.78Limitacin del mtodoSe debe implementar el algoritmoSe requiere calcular la complejidad antes de la implementacin para ahorrar tiempo y $$$

Los resultados encontrados no son representativos de todas las entradas

Para comparar 2 algoritmos diferentes del mismo problema, debemos utilizar el mismo ambiente(hardware y software)

89Mtodo 2: Anlisis Terico Se hace a partir del pseudocdigo del algoritmo y no de la implementacin

Describe el tiempo de ejecucin como una funcin de n, el tamao de la entrada

Toma en consideracin todas las entradas

Independiente del ambiente (SW, HW)910Varias funciones importantesFuncin constante f (n) = 1Funcin lineal f (n) = nFuncin logartmica f (n) = log (n) Funcin cuadrtica f (n) = n2Funcin cbica, f (n) = n3 Funcin polinomial f (n) = n2 + n + 1Funcin Factorialf (n) = n!Funcin exponencial f (n) = 2n 1011

11Un poco de clculoCalculamos los valores de esta funcin

f(n) = n2 + 100 n + log10 n + 1000Para n = 1, 10, 100, 1000, 10 000, 100 000

1213Orden de crecimientof(n) = n2 + 100 n + log10 n + 1000

1314Cundo decimos que un algoritmo es bueno?

Armemos esta tabla..... (los tiempos estn dados en segundos y los algoritmos corren en la misma mquina)

1415La tabla queda as ..(los tiempos estn dados en segundos salvo cuando dice otra cosa)

1516Los datos de la tabla anterior corresponden a una mquina muy vieja (1979).Qu pasa si tenemos una mquina 1000 veces ms rpida?. Un milln de veces ms rpida?. Cul sera el tamao del problema que podemos resolver en una hora comparado con el problema que podemos resolver ahora?.

1617Cundo diremos entonces que un algoritmo es bueno?.

Cundo un algoritmo es suficientemente eficiente para ser usado en la prctica?

=============================POLINOMIAL = buenoEXPONENCIAL = malo=============================

1718Qu pasa si tengo complejidades como las siguientes?:

n80 (polinomio) 1.001n (exponencial)

esto no ocurre en la prctica1819Anlisis de Algoritmos Qu es Complejidad?.

Ordenes de Complejidad.

Complejidad de instrucciones bsicas.

Algunos problemas clsicos.1920Anlisis de Algoritmos Qu es Complejidad?

Ordenes de Complejidad.

Complejidad de instrucciones bsicas.

Un problema clsico.2021Complejidad Cmo se mide la complejidad?

La complejidad est asociada a un problema o a una solucin del problema?

La complejidad depende de la implementacin?2122Complejidad Qu se entiende por complejidad? La Complejidad es una medida de la cantidad que consume un algoritmo de un recurso determinado. En general hablamos de Complejidad Espacial o Complejidad Temporal.2223Complejidad Problema: Pregunta sobre un conjunto de datos. Solucin: Mtodo general para resolver todas las posibles preguntas. 2324Complejidad Problema: X = { (p(x), r(x)) | x D }. Solucin: Es una relacin A: P R tal que para cada pregunta posible p, (p, A (p)) X. Para un problema X existen preguntas ms difciles de resolver o ms grandes que otras. Conjunto de pares de preguntas respuestas2425Complejidad Problema: X = { ((a, k), i) | a=A [0..n-1] 0 i n-1 a [i] = k}. Solucin: Algoritmo de Bsqueda Lineal. BL responde preguntas fciles y preguntas difciles (de qu depende la dificultad?).2526Complejidad Si el recurso es espacio: Cantidad de memoria requerida para una ejecucin. Si el recurso es tiempo: Cantidad de tiempo requerido para una ejecucin. n + 2. depende! 2627Complejidad en TiempoT (algo, d) = tiempo de ejecucin del algoritmo algo aplicado sobre los datos dComplejidad en el peor caso:TMAX (algo, n) = max {T(algo, d), d de tamao n}

Complejidad en el mejor caso:TMIN (algo, n) = min {T(algo, d), d de tamao n}

Complejidad mediana:TMED (algo, n) = p(d) T(algo, d) dp(d)= probabilidad de tener el caso d2728Operaciones elementalesOperaciones bsicas efectuadas por el algoritmo, ejemplo:Evaluar una expresinAsignar un valor a una variableMandar a llamar a un mtodoEtc.Independientes del lenguaje de programacin utilizadoConsideramos que tienen un tiempo de ejecucin constante

2829Ejercicio de conteoCuntas veces se repite el ciclo?

for (int i = 0; i < 10; i++)suma = suma + A[i];

for (int i = 0; i < 10; i++) for (int j = 0; j < 20; j++) suma = suma + B[i][j];

Ejercicio de conteoCuntas veces se repite el ciclo?

for (int i = 0; i < n; i++)suma = suma + A[i];

for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) suma = suma + B[i][j];

3031Contar las operaciones bsicasFijndonos en el seudocdigo del algoritmo, podemos determinar el nmero mximo de operaciones elementales ejecutadas por el algoritmo, como una funcin del tamao de la entradaAlgo MaxArr (A, n) max A[0]for i 1 to n -1 hacer if (A[i] > max) max A[i]return max

32Contar las operaciones bsicasFijndonos en el seudo cdigo del algoritmo, podemos determinar el nmero mximo de operaciones elementales ejecutadas por el algoritmo, como una funcin del tamao de la entradaAlgo MaxArr (A, n)# operacionesmax A[0]2for i 1 to n-1 hacer 2n-1if (A[i] > max) 2(n-1) max A[i]2(n-1)i++2(n-1)return maxTotal 8n-53233Estimacin del tiempoEl algoritmo MaxArr ejecuta 8n-5 operaciones elementales en el peor de los casos; considerando: a= tiempo de ejecucin mas rpido de una operacin elemental b= tiempo de ejecucin mas lento de una operacin elemental

Sea T(n) la complejidad en el peor caso de MaxArr, entonces a(8n-5) T(n) b(8n-5)Entonces el tiempo de ejecucin est limitado por 2 funciones.3334ComplejidadBsqueda en un arreglo: {Pre Q: a=Arr [0..n-1] x=X}i = 0;do (i n arr[i]x) i = i+1 od;{Pos R: (i=n XArr) (0 i