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.