400 likes | 758 Views
Análisis de Algoritmo. Cecilia Laborde González Cecilia.laborde.g@gmail.com. Objetivos. Profundizar en la aplicación de técnicas para el análisis de la eficiencia en tiempo y espacio de un algoritmo. Aplicar técnicas para el análisis de eficiencia de algoritmos recursivos.
E N D
Análisis de Algoritmo Cecilia Laborde González Cecilia.laborde.g@gmail.com
Objetivos Profundizar en la aplicación de técnicas para el análisis de la eficiencia en tiempo y espacio de un algoritmo. Aplicar técnicas para el análisis de eficiencia de algoritmos recursivos. Aplicar una técnica de diseño de algoritmos adecuada al problema a resolver. Establecer las bases teóricas que permitan comprender una tipificación de problemas clásicos en las ciencias de la computación y la ingeniería informática. Conocer acerca de la existencia de problemas intratables e insolubles.
Contenidos • Unidad I EFICIENCIA DE ALGORITMOS (16) • Eficiencia de los algoritmos • Medidas de eficiencia • Medidas de eficiencia de algoritmos. • Medidas simplificadas de eficiencia • Costos de un algoritmo • Orden de magnitud • Análisis de “peor caso”, “caso medio” y “mejor caso”.
Contenidos • Unidad II COMPLEJIDAD COMPUTACIONAL (8) • Algoritmos y complejidad • Introducción a la NP-completitud • Las clases P y NP • Problemas NP-completos • Problemas NP-difíciles • Problemas de decisión y optimización
Contenidos • Unidad III ANALISIS de ALGORITMO(20) • Tiempo de ejecución • Notación asintótica • Notación “orden de”: notación O • Órdenes de complejidad • Operaciones sobre notación asintótica • Análisis de algoritmos • Análisis de algoritmos no recursivos • Análisis de algoritmos recursivos • Algoritmos recursivos y ecuaciones de recurrencia
Contenidos • Unidad III ANALISIS de ALGORITMO(20) • Ecuaciones de recurrencia • Recurrencias homogéneas y no homogéneas • Resolución de recurrencias • Cambios de variable • Teorema maestro de recurrencias del tipo divide y conquista • Algoritmos de búsqueda • Búsqueda secuencial • Búsqueda por árboles binarios • Algoritmos de ordenamiento • Ordenamiento por mezcla • Ordenamiento quicksort
Contenidos • Unidad IV TÉCNICAS CLÁSICAS DE CONSTRUCCIÓN DE ALGORITMOS(28) • Fundamentos para la construcción de algoritmos • Algoritmos voraces (Greedy) • Características generales de los algoritmos voraces • El problema de la mochila • El problema de cambio de mone • Aplicaciones en grafos • Divide y conquista • Algunos esquemas basados en divide y conquista • Multiplicación de enteros grandes • Multiplicación de matrices (algoritmo de Strassen) • Otras aplicaciones del esquema divide y conquista
Contenidos • Unidad IV TÉCNICAS CLÁSICAS E CONSTRUCCIÓN DE ALGORITMOS(28) • Programación dinámica • Características generales de la programación dinámica • Ejemplos sencillos de programación dinámica • Exploración de grafos • Backtraking • Branco and Bound • Algoritmos heurísticos • Heurística • Algoritmos heurísticos
Evaluaciones 28 Septiembre, primera evaluación. 09 Noviembre, segunda evaluación 07 Diciembre, Tercera evaluación, entrega de trabajo
¿ QUE ES UN ALGORITMO? Podríamos definirlo como un: CONJUNTO ORDENADO Y FINITO DE INSTRUCCIONES QUE PERMITEN ENCONTRAR LA SOLUCION DE UN DETERMINADO PROBLEMA
DEFINIDO PRECISO FINITO Es decir, cada instrucción debe indicar claramente lo que se tiene que hacer. Es decir, debe tener un número limitado de pasos. Es decir, debe producir los mismos resultados para las mismas condiciones de entrada. CARACTERISTICAS DEUN ALGORITMO Un algoritmo debe ser:
LOS DIAGRAMAS RepresentanGRAFICAMENTE las ACTIVIDADES que conforman unPROCESO. Los diagramas son la representación de la SOLUCIÓN de un PROBLEMA. inicio Proceso1 Proceso2 Proceso3 fin ¿COMO REPRESENTAMOS LOS ALGORITMOS ? Se pueden representar mediante DIAGRAMAS o TEXTO TEXTO Los algoritmos se pueden representar mediante FRASES que representan los PROCEDIMIENTOS que dan la SOLUCIÓN al PROBLEMA.
inicio Proceso1 Proceso2 Proceso3 fin EJEMPLO DE DIAGRAMAS DE FLUJO
LINEAS DE FLUJO O FLECHAS Muestran la dirección del flujo de datos o secuencia de lasinstrucciones. TERMINAL / ECLIPSE Indican el comienzo o final de cadamódulo. Símbolos Start End/Stop/Exit
RECTANGULO / PROCESO Indicaprocesamientocomocálculos y abrir y cerrararchivos. PARALELOGRAMO Indica input y output de la memoria del computador. IMPRESION DE DOCUMENTO Representa la impresión de datos (Normalmente de respuesta) Símbolos
DIAMANTE Indicadecisión. Tiene dos salidasdependiendosi la decisiónescierta o falsa. PROCESO DE UN MODULO Implicaque se hará un procesoexterno o subtarea. Símbolos
POLIGONO / PREPARACION Representa las condiciones de un grupo de procesos que se repiten automáticamente utilizando un contador. Counter A B S Símbolos Aes el valor inicial del contadorCounter. Ses el incremento del contador. Bes el límite hasta dondedebellegar el contador.
CONECTOR EN LA PAGINA Se utilizaparaconectarsecciones del diagrama de flujo en unamismapágina. CONECTOR FUERA DE LA PAGINA Conectorqueune dos partes de diagramaque no caben en una sola página. Ambos debenutilizarse lo menosposible. Símbolos
REGLAS PARA DIBUJARDIAGRAMAS DE FLUJO • Las instruccionesdebenserescritasdentro de los símbolos. • Si tienequehaceralgunaanotación o comentario, hágaloal lado del símbolo. • Un diagrama de flujosiemprecomienzaarriba en la página y fluyehaciaabajo. • Si necesitamás de unapáginadibujeporcolumnas y utiliceconectores. • Utilicealgúntipo de software paradibujar un DDF. • Haga los símbolos lo suficientementegrandescomoparaque lo queescriba en ellos sea fácil de leer.
Inicio 1 Huevo, fósforo cocina, paila, aceite Abrir huevo Encender Fósforo Encender cocina con fósforo Vertir huevo en la paila Colocar paila sobre cocina Esperar a que se fría Agregar aceite a la paila fin 1 EJEMPLO PRACTICO Freir un Huevo Descripción: Este diagrama de flujo describe detalladamente como freir un huevo.
Áreas de estudio • ¿Cómo construir algoritmos? • Técnicas de diseño • ¿Cómo expresar algoritmos? • Enfoques de los lenguajes de programación • ¿Cómo validar algoritmos? • Verificación formal • ¿Cómo analizar algoritmos? • Complejidad computacional, eficiencia, legibilidad, usabilidad, etc...
Análisis de algoritmos • Si se tuvieran 2 programas que hacen lo mismo, ¿cómo se podrían comparar? • Eficiencia: • Tiempo de ejecución • Uso de espacios de memoria • Facilidad de lectura, mantenimiento, rapidez para codificarlo.
Análisis de algoritmos Ejemplo, tiempo Aplicaciones informáticas que trabajan “en tiempo real”: requieren que los cálculos se realicen en el menor tiempo posible. Aplicaciones que manejan un gran volumen de información: si no se tratan adecuadamente pueden necesitar tiempos impracticables.
Análisis de algoritmos Una Leyenda Mucho tiempo atrás, el visir SissaBen Dahir inventó el juego del ajedrez para el rey Shirham de la India. El rey ofreció a Sissa la posibilidad de elegir su propia recompensa. Sissa le dijo al rey que podía recompensarle en trigo, con una cantidad equivalente a la cosecha de trigo en su reino de dos años, o bien con una cantidad de trigo que se calcularía de la siguiente forma: • un grano de trigo en la primera casilla de un tablero de ajedrez, • más dos granos de trigo en la segunda casilla, • más cuatro granos de trigo en la tercera casilla, • y así sucesivamente, duplicando el número de granos en cada casilla, hasta llegar a la última casilla. El rey pensó que la primera posibilidad era demasiado cara mientras que la segunda medida, además en simples granos de trigo, daba la impresión de serle claramente favorable.
Análisis de algoritmos Una Leyenda Así que sin pensárselo dos veces pidió que trajeran un saco de trigo para hacer la cuenta sobre el tablero de ajedrez y recompensar inmediatamente al visir. El número de granos en la primera fila resultó ser: 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 = 255 La cantidad de granos en las dos primeras filas es: = − 1 = 65.535
Análisis de algoritmos Una Leyenda Al llegar a la tercera fila el rey empezó a pensar que su elección no había sido acertada, pues para llenar las tres filas necesitaba: - 1 = 16.777.216 granos, que pesan alrededor de 600 kilos . . . En efecto, para rellenar las 64 casillas del tablero hacen falta : - 1 = 18446744073709551615 Granos, una cantidad muy grande.
Análisis de algoritmos • Una Leyenda • La función − 1 representa el número de granos adeudados en función del número n de casillas a rellenar. Toma valores desmesurados aunque el número de casillas sea pequeño. • El coste en tiempo de algunos algoritmos expresado en función del tamaño de los datos de entrada es también exponencial. Por ello es importante estudiar el coste de los algoritmos y ser capaces de comparar los costes de algoritmos que resuelven un mismo problema.
Análisis de algoritmos • La técnica que se utilizaba en los primeros años de la programación para comparar la eficiencia de distintos algoritmos consistía en ejecutarlos para datos diferentes y medir el tiempo consumido. • Dado que las máquinas y los lenguajes eran dispares, y que el tiempo de ejecución depende no solo del tamaño sino también del contenido de los datos, resultaba muy difícil comparar tales resultados. • El primer estudio serio sobre la eficiencia de los algoritmos se lo debemos a Daniel Goldenberg del MIT. En 1952 realizó un análisis matemático del número de comparaciones necesarias, en el mejor y en el peor caso, de cinco algoritmos distintos de ordenación. • La tesis doctoral de Howard B. Demuth de la Universidad de Stanford estableció en 1956 las bases de lo que hoy llamamos análisis de la complejidad de los algoritmos.
Análisis de algoritmos • La técnica que se utilizaba en los primeros años de la programación para comparar la eficiencia de distintos algoritmos consistía en ejecutarlos para datos diferentes y medir el tiempo consumido. • Dado que las máquinas y los lenguajes eran dispares, y que el tiempo de ejecución depende no solo del tamaño sino también del contenido de los datos, resultaba muy difícil comparar tales resultados. • El primer estudio serio sobre la eficiencia de los algoritmos se lo debemos a Daniel Goldenberg del MIT. En 1952 realizó un análisis matemático del número de comparaciones necesarias, en el mejor y en el peor caso, de cinco algoritmos distintos de ordenación. • La tesis doctoral de Howard B. Demuth de la Universidad de Stanford estableció en 1956 las bases de lo que hoy llamamos análisis de la complejidad de los algoritmos.