170 likes | 436 Vues
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. ALGORITMO.
E N D
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. ALGORITMO 0 ó más entradas 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. Algoritmos+ Algoritmos + Estructuras de Datos = Programas • Estructura de datos: Parte estática, almacenada. • Algoritmo: Parte dinámica, manipulador. PROBLEMA PROGRAMA Estructuras de Datos
Definición y propiedades. Método científicoTecnologías de Información • Observación. • Hipótesis. • Experimentación. • Verificació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 Algoritmo informal Tipos de Datos Abstractos(TDA) Programa en pseudocódigo Estructuras de Datos 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.