QUE ES UN DISEÑO CON ALGORITMOS?
el diseño de algoritmos es un método específico para poder crear un modelo matemático ajustado a un problema específico para resolverlo. El diseño de algoritmos es una teoría de la Investigación de operaciones.
En
la etapa de análisis del proceso se determina qué hace el programa. En la etapa
del diseño se determina como hace el programa la tarea solicitada.
Los métodos
más eficientes para el proceso de diseño se basan en el conocido de divide y vencerás. Es decir, la resolución de un
problema complejo se realiza dividiendo el problema es sub problemas y a
continuación dividir estas sub problemas en otros de nivel más bajo, hasta que
puede ser implementado una solución en el computador. Este método se conoce con
el nombre de diseño descendente o modular.
Las
dos herramientas más utilizadas comúnmente para diseñar algoritmos son:
Diagramas de Flujo y pseudocódigos.
ALGUNAS TÉCNICAS DE DISEÑO
- Algoritmos voraces (greedy): seleccionan los elementos más prometedores del conjunto de candidatos hasta encontrar una solución. En la mayoría de los casos la solución no es óptima.
- Algoritmos paralelos: permiten la división de un problema en subproblemas de forma que se puedan ejecutar de forma simultánea en varios procesadores.
- Algoritmos probabilísticos: algunos de los pasos de este tipo de algoritmos están en función de valores pseudoaleatorios
- Algoritmos determinísticos: El comportamiento del algoritmo es lineal: cada paso del algoritmo tiene únicamente un paso sucesor y otro ancesor.
- Algoritmos no determinísticos: El comportamiento del algoritmo tiene forma de árbol y a cada paso del algoritmo puede bifurcarse a cualquier número de pasos inmediatamente posteriores, además todas las ramas se ejecutan simultáneamente.
- Divide y vencerás: dividen el problema en subconjuntos disjuntos obteniendo una solución de cada uno de ellos para después unirlas, logrando así la solución al problema completo.
- Metaheurísticas: encuentran soluciones aproximadas (no óptimas) a problemas basándose en un conocimiento anterior (a veces llamado experiencia) de los mismos.
- Programación dinámica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial.
UNA PROGRAMACIÓN DINÁMICA
- Ramificación y acotación: se basa en la construcción de las soluciones al problema mediante un árbol implícito que se recorre de forma controlada encontrando las mejores soluciones.
- Vuelta Atrás (Backtracking): se construye el espacio de soluciones del problema en un árbol que se examina completamente, almacenando las soluciones menos costosas.
https://www.youtube.com/watch?v=UHMjSO6Ql8U
No hay comentarios:
Publicar un comentario