2. Tipos de Algoritmos:
• Algoritmos Voraces
• Algoritmos Probabilisticos
• Algoritmos Geometricos
• Algoritmos Paralelos
• Algoritmos de Tiempo Real
• Algoritmos Genetico
3. Algoritmos Voraces
• Los algoritmos voraces, ávidos o de avance rápido (greedy) se utilizan
normalmente en problemas de optimización, donde una solución está
formada por un conjunto de elementos entre un conjunto de candidatos
(con un orden determinado o no).
• El algoritmo voraz funciona por pasos:
• Partimos de una solución vacía.
• En cada paso se escoge el siguiente elemento para añadir a la solución, entre
los candidatos.
• Una vez tomada esta decisión no se podrá deshacer.
• El algoritmo acabará cuando el conjunto de elementos seleccionados constituya
una solución.
5. Metodo General
• Funciones:
• solución (S). Comprueba si un conjunto de candidatos es una solución
(independientemente de que sea óptima o no).
• seleccionar (C). Devuelve el elemento más “prometedor” del conjunto de
candidatos pendientes (no seleccionados ni rechazados).
• factible (C). Indica si a partir del conjunto de candidatos C es posible
construir una solución (posiblemente añadiendo otros elementos).
• Insertar un elemento en la solución. Además de la inserción, puede ser
necesario hacer otras cosas.
• Función objetivo (S). Dada una solución devuelve el coste asociado a la
misma (resultado del problema de optimización).
6. Problema del cambio de monedas
• Disponemos de monedas de distintos valores: de 1, 2, 5, 10, 20 y 50
céntimos de euro, y de 1 y 2 euros.
• Supondremos una cantidad ilimitada de cada una.
• Construir un algoritmo que dada una cantidad P devuelva esa cantidad con
monedas de estos tipos, usando un número mínimo de monedas.
• P. ej.: para devolver 3.89 €: 1 monedas de 2€, 1 moneda de 1€, 1 moneda
de 50 c€, 1 moneda de 20 c€, 3 monedas de 5 c€ y 2 monedas de 2 c€.
• Podemos aplicar la técnica voraz: en cada paso añadir una moneda nueva
a la solución actual, hasta que el valor llegue a P.
7. C++
• “Supón que una maquina de monedas de 10,5,2,1 y
50 centavos. Debes escribir un programa que decida
cuantas monedas dará de cambio, dando prioridad las
de mayor denominación. Debe recibir como entrada la
cantidad de dar a cambio. Ejemplo: para $40.50
será 4 de 10, 0 de 5, 0 de 2, 0 de 1 y 1 de 50
centavos.”
8. Algoritmos Probabilisticos
Deja al azar la toma de algunas
decisiones.
• Cuando la decisión óptima
llevaría mucho tiempo.
• Problemas con múltiples soluciones
correctas.
Ejemplos:
• Encontrar el k ésimo menor
elemento de un vector de n
elementos – Problema de las ocho
reinas.
• Encontrar un factor de un número
compuesto
9. Carcacterísticas de los algoritmos probabilistas:
• Un mismo algoritmo se puede comportar de forma diferente al aplicarse
varias veces a un mismo caso. Su tiempo de ejecución y el resultado
obtenido puede ser diferente.
• Terminación: A diferencia de los algoritmos no probabilistas que no
permiten que se pierda el control (bucle infinito, división por cero,.), los
algoritmos probabilistas si que lo permiten, ya que ante una situación de
bloqueo pueden reiniciarse otravez.
• Resultados erróneos: En algunos casos se permite que los algoritmos
probabilistas produzcan
10. Clasificación de los algoritmos
probabilistas
• Algoritmos Numéricos, que proporcionan una solución aproximada del
problema.
• Algoritmos de Montecarlo, que pueden dar la respuesta correcta o
respuesta erróneas (con probabilidad baja).
• Algoritmos de Las Vegas, que nunca dan una respuesta incorrecta: o bien
no encuentran la respuesta correcta e informan del fallo.
11.
12. Algoritmo numérico ejecutado cinco veces:
• “Entre 1490 y 1500.”
• “Entre 1485 y 1495.”
• “Entre 1491 y 1501.”
• “Entre 1480 y 1490.”
• “Entre 1489 y 1499.”
• Aparentemente, la probabilidad de dar un intervalo erróneo es del 20% (1
de cada 5). • Dando más tiempo a la ejecución se podría reducir esa
probabilidad o reducir la anchura del intervalo (a menos de 11 años).
13. Algoritmo de Monte Carlo ejecutado diez
veces:
• 1492, 1492, 1492, 1491, 1492, 1492, 357 A.C., 1492, 1492, 1492.
• De nuevo un 20% de error. Este porcentaje puede reducirse dando más tiempo
para la ejecución.
• Las respuestas incorrectas pueden ser próximas a la correcta o completamente
desviadas.
14. Algoritmo de Las Vegas ejecutado diez
veces:
• 1492, 1492, ¡Error!, 1492, 1492, 1492, 1492, 1492, ¡Error!, 1492.
• El algoritmo nunca da una respuesta incorrecta.
• El algoritmo falla con una cierta probabilidad (20% en este caso).
15. Algoritmos Geometricos
• La geometría computacional es
una rama de la ciencia de la
computación que estudia
algoritmos para resolver
problemas geométricos.
• Aplicaciones Computación gráfica,
CAD (Computer-Aided Design),
robótica, diseño de circuitos
integrados, GIS (Geographic
information System),…
20. Algoritmos Paralelos
• Los problemas que pueden
resolverse mediante un algoritmo
paralelo son, obviamente, muy
heterogéneos.
• Suelen ser problemas de
complejidad elevada, aún no
perteneciendo al grupo de
problemas intratables (el número
de operaciones crece de forma
rápida –p.e. exponencial– con el
tamaño del problema).
25. Características Generales
• Usado típicamente para aplicaciones
integradas, normalmente tiene las
siguientes características:
• No utiliza mucha memoria
• Cualquier evento en el soporte físico
puede hacer que se ejecute una tarea
• Multi-arquitectura (código portado a
cualquier tipo de CPU)
• Muchos tienen tiempos de respuesta
predecibles para eventos electrónicos
Se caracterizan por presentar
requisitos especiales en cinco áreas
generales:
• Determinismo
• Sensibilidad
• Control del usuario
• Fiabilidad
• Tolerancia a los fallos
• Son de tiempo compartido