Transcript Algoritmo
Definición y propiedades. • Algoritmo: Conjunto de reglas para resolver un problema. • Propiedades – Definibilidad: El conjunto debe estar bien definido, sin dejar dudas en su interpretación. – Finitud: Debe tener un número finito de pasos que se ejecuten en un tiempo finito. 0 ó más entradas ALGORITMO 1 ó más salidas Definición y propiedades. • Algoritmos deterministas: Para los mismos datos de entrada se producen los mismos datos de salida. • Algoritmos no deterministas: Para los mismos datos de entrada pueden producirse diferentes de salida. • Objetivo: Dado un problema concreto encontrar la mejor forma de resolverlo. Definición y propiedades. Ser capaz de analizar, comprender y resolver una amplia variedad de problemas de programación, diseñando soluciones eficientes y de calidad. Pero ojo, los algoritmos no son el único componente en la resolución de un problema de programación. Definición y propiedades. PROBLEMA Algoritmos + Estructuras de Datos PROGRAMA Algoritmos + Estructuras de Datos = Programas • Estructura de datos: Parte estática, almacenada. • Algoritmo: Parte dinámica, manipulador. Definición y propiedades. Método científico 1.Observación. 2.Hipótesis. 3.Experimentación. 4.Verificación. Tecnologías de Información 1. Análisis del problema 2. Diseño del programa (alg. y estr.) 3. Implementación (programación) 4. Verificación y pruebas Definición y propiedades. Otras ideas... • Refinamiento por pasos sucesivos. – Escribir la estructura de la solución en pseudocódigo, de manera muy genérica. – Especificar los pasos de forma cada vez más detallada, y precisa. – Repetimos el refinamiento hasta llegar a una implementación. Definición y propiedades. • Proceso de resolución propuesto por Alfred Aho Modelo matemático Tipos de Datos Abstractos(TDA) Estructuras de Datos Algoritmo informal Programa en pseudocódigo Programa en C++ Análisis de algoritmos. • Análisis de algoritmos: Estudio de los recursos que necesita la ejecución de un algoritmo. • No confundir con análisis de un problema. • Diseño de algoritmos: Técnicas generales para la construcción de algoritmos. • Por ejemplo, divide y vencerás: dado un problema, divídelo, resuelve los subproblemas y luego junta las soluciones. Diseño de algoritmos. • Diseño de Algoritmos. Técnicas generales, aplicables a muchas situaciones. • Esquemas algorítmicos. • Ejercicio 1, para entregar en la clase. – Escribir en pseudocódigo un algoritmo para calcular el octavo número de la serie de Fibonacci, recordando lo siguiente: Los números de Fibonacci están definidos como: f(0) = 0, f(1) = 1, f(n) = f(n-1) + f(n-2) para n = 2, 3, 4, 5,.... Diseño de algoritmos. • Técnicas de diseño de algoritmos: 1. Divide y vencerás. 2. Algoritmos voraces. 3. Programación dinámica. 4. Backtracking. 5. Ramificación y Acotación. • Dado un problema: seleccionar la técnica, seguir el proceso/esquema algorítmico, obtener el algoritmo y comprobarlo. • Recordar: ! No empezar tecleando código como locos ¡ Divide y Vencerás • En las tecnologías de la información, el término divide y vencerás hace referencia a uno de los más importantes paradigmas de diseño algorítmico. El método está basado en la resolución recursiva de un problema dividiéndolo en dos o más subproblemas de igual tipo o similar. El proceso continúa hasta que éstos llegan a ser lo suficientemente sencillos como para que se resuelvan directamente. Al final, las soluciones a cada uno de los subproblemas se combinan para dar una solución al problema original. Recursivo • Es la forma en la cual se especifica un proceso basado en su propia definición. Algoritmo voraz • Un algoritmo voraz (también conocido como ávido, devorador o goloso) es aquel que, para resolver un determinado problema, sigue una heurística consistente en elegir la opción óptima en cada paso local con la esperanza de llegar a una solución general óptima. Este esquema algorítmico es el que menos dificultades plantea a la hora de diseñar y comprobar su funcionamiento. Normalmente se aplica a los problemas de optimización. Real Academia Española • heurístico, ca. – – – – – (Del gr. εὑρίσκειν, hallar, inventar, y ‒́tico). 1. adj. Perteneciente o relativo a la heurística. 2. f. Técnica de la indagación y del descubrimiento. 3. f. Busca o investigación de documentos o fuentes históricas. 4. f. En algunas ciencias, manera de buscar la solución de un problema mediante métodos no rigurosos, como por tanteo, reglas empíricas, etc. Programación dinámica • En Tecnologías de la información, la programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas. Backtracking • El backtracking es una estrategia usada para encontrar soluciones a problemas que tienen una solución completa, en los que el orden de los elementos no importa, y en los que existen una serie de variables a cada una de las cuales debemos asignarle un valor teniendo en cuenta unas restricciones dadas. Ramificación y Acotación • El método de diseño de algoritmos Ramificación y poda (también llamado Ramificación y Acotación) es una variante del Backtracking mejorado sustancialmente. El término (del inglés, Branch and Bound) se aplica mayoritariamente para resolver cuestiones o problemas de optimización. La técnica de Ramificación y poda se suele interpretar como un árbol de soluciones, donde cada rama nos lleva a una posible solución posterior a la actual.