Tema 10: Algoritmos ávidos

Análisis de algoritmos
Tema 10: Algoritmos ávidos
Solicitado: Ejercicios 07: Ejercicios sobre Dijkstra, Prim y Kruskal
M. en C. Edgardo Adrián Franco Martínez
http://www.eafranco.com
[email protected]
@edfrancom
edgardoadrianfrancom
1
• Introducción
• Algoritmos ávidos
• Forma general de un algoritmo ávido
• Planteamiento de un algoritmo ávido
• Ejemplo
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Contenido
• Mínimo número de monedas
• Ejercicios 07: Ejercicios sobre Dijkstra, Prim y
Kruskal
2
• Los algoritmos ávidos o voraces (Greedy Algorithms)
son algoritmos que toman decisiones de corto
alcance, basadas en información inmediatamente
disponible, sin importar consecuencias futuras.
• Suelen ser bastante simples y se emplean sobre
todo para resolver problemas de optimización, como
por ejemplo, encontrar la secuencia óptima para
procesar un conjunto de tareas por un computador,
hallar el camino mínimo de un grafo, etc.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Introducción
3
• Normalmente son utilizados para resolver
problemas en los que la velocidad de respuesta
debe ser muy alta o en la que el árbol de decisiones
de búsqueda es muy grande, no siendo posible
analizar la totalidad de posibilidades.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Los algoritmos voraces también se caracterizan por
la rapidez en que encuentran una solución (cuando
la encuentran), la cual casi siempre no es la mejor.
4
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• La estrategia general de este tipo de algoritmos se
basa en la construcción de una solución, la cual
comienza sin elementos y cada vez que debe tomar
algún tipo de decisión, lo hace con la información
que tiene a primera mano, la cual de alguna manera
le permita adicionar elementos y así avanzar hacia la
solución total. Cada elemento o paso de la solución
se adiciona al conjunto solución y así hasta llegar a
la solución final o a un punto en el cual no puede
seguir avanzando, lo cual indica que no encontró
una solución al problema.
5
• Un conjunto o lista de candidatos (tareas a procesar,
vértices del grafo, etc.)
• Un conjunto de decisiones ya tomadas (candidatos ya
escogidos).
• Una función que determina si un conjunto de
candidatos es una solución al problema (aunque no
tiene por qué ser la óptima).
• Para resolver el problema de optimización hay que
encontrar un conjunto de candidatos que optimiza
la función objetivo. Los algoritmos voraces proceden
por pasos.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Habitualmente, los elementos que intervienen son:
6
• 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.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Algoritmos ávidos
7
• Cada conjunto 𝑆 que satisfaga las restricciones se le
suele denominar prometedor, y si este además logra que
la función objetivo se minimice o maximice (según
corresponda) diremos que 𝑆 es una solución óptima.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Dado un conjunto finito de entradas C, un algoritmo
voraz devuelve un conjunto S (seleccionados) tal que
S ⊆ C y que además cumple con las restricciones del
problema inicial.
8
• El conjunto 𝑪 de candidatos, entradas del problema.
• Función solución, esta comprueba, en cada paso, si el
subconjunto actual de candidatos elegidos forma una
solución (no importa si es óptima o no lo es).
• Función de selección, informa de cuál es el elemento más
prometedor para completar la solución. Éste no puede haber
sido escogido con anterioridad. Cada elemento es
considerado una sola vez. Luego, puede ser rechazado o
aceptado y pertenecerá a 𝐶 \ 𝑆.
• Función de factibilidad, informa si a partir de un conjunto se
puede llegar a una solución. Lo aplicaremos al conjunto de
seleccionados unido con el elemento más prometedor.
• Función objetivo, es aquella que queremos maximizar o
minimizar, el núcleo del problema.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Elementos de los que consta la técnica
9
Función Ávido(C:conjunto):conjunto //C conjunto de candidatos
S <= vacio //S conjunto en el que se construye la solución
mientras ¬solución(S) y C <> vacío hacer
x <= el elemento de C que maximiza seleccionar(x)
C <= C \ {x}
si prometedor(S U {x}) entonces S <= S U {x}
si solución(S)
entonces devolver S
si no devolver no hay solución
Fin Ávido
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Forma general de un algoritmo ávido
10
• Para identificar si un problema es susceptible de ser
resuelto por un algoritmo ávido se definen una serie
de elementos que han de estar presentes en el
problema:
• Un conjunto de candidatos, que corresponden a las n
entradas del problema.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Forma general de un algoritmo ávido
• Una función de selección que en cada momento determine
el candidato idóneo para formar la solución de entre los
que aún no han sido seleccionados ni rechazados.
11
• Una función objetivo que determine el valor de la solución
hallada. Es la función que queremos maximizar o
minimizar.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Una función que compruebe si un cierto subconjunto de
candidatos es prometedor. Entendemos por prometedor
que sea posible seguir añadiendo candidatos y encontrar
una solución.
• Una función que compruebe si un subconjunto de estas
entradas es solución al problema, sea óptima o no.
12
• Para resolver el problema, un algoritmo ávido tratará de encontrar un
subconjunto de candidatos tales que, cumpliendo las restricciones del
problema, constituya la solución óptima.
• Para ello trabajará por etapas, tomando en cada una de ellas la
decisión que le parece la mejor, sin considerar las consecuencias
futuras, y por tanto escogerá de entre todos los candidatos el que
produce un óptimo local para esa etapa, suponiendo que será a su vez
óptimo global para el problema.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Planteamiento de un algoritmo ávido
• Antes de añadir un candidato a la solución que está construyendo
comprobará si es prometedora al añadirlo. En caso afirmativo lo
incluirá en ella y en caso contrario descartará este candidato para
siempre y no volverá a considerarlo.
• Cada vez que se incluye un candidato comprobará si el conjunto
obtenido es solución.
13
• Se pide crear un algoritmo que permita a una máquina
expendedora devolver el cambio mediante el menor número
de monedas posible.
1. Considerando que el número de monedas es ilimitado.
2. Considerando que el número de monedas es limitado,
es decir, se tiene un número concreto de monedas de
cada tipo.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Ejemplo: Mínimo número de monedas
14
• Solución: conjunto de monedas cuya suma es la cantidad a
pagar.
• Prometedor: la suma de las monedas escogidas en un
momento dado no supera la cantidad a pagar.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Candidato: conjunto finito de monedas de, por ejemplo, 1,
5, 10 y 25 unidades, con un número de monedas ilimitado
o limitado.
• Función de selección: la moneda de mayor valor en el
conjunto de candidatos aún no considerados.
• Función objetivo: número de monedas utilizadas en la
solución.
15
• Si hay que devolver la cantidad 110, se tomaría primero una moneda de
50, quedando una cantidad restante de 60. Como 50 es aún menor que
60, se tomaría otra moneda de 50. Ahora la cantidad restante es 10, por
tanto ya tenemos que devolver una moneda de 5, ya que 50 y 25 son
mayores que 10, y por tanto se desechan. La cantidad a devolver ahora es
5. Se tomaría otra moneda de 5, terminando así el problema de forma
correcta.
• Solución: Devolver dos monedas de 50 y dos de 5.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• La estrategia a seguir consiste en escoger sucesivamente las
monedas de valor mayor que no superen la cantidad de
cambio a devolver. El buen funcionamiento del algoritmo
depende de los tipos de monedas presentes en la entrada.
Así, por ejemplo, si no hay monedas de valor menor que diez,
no se podrá devolver un cambio menor que diez. Además, la
limitación del número de monedas también influye en la
optimalidad del algoritmo, el cual devuelve buenas
soluciones bajo determinados conjuntos de datos, pero no
siempre.
Denominación de Monedas 50 25 5 1
16
fun cambio (monedas_valor[1..n] de nat, importe: nat) dev
cambio[1..n] de nat
m := 1;
mientras (importe > 0) and (m <= n) hacer
si (monedas_valor[m] <= importe) entonces
monedas[m] := monedas[m] – 1;
cambio[m] := cambio[m] + 1;
importe := importe – monedas_valor[m];
si no
m := m + 1;
fsi
fmientras
si importe > 0 entonces devolver “Error”; fsi
ffun
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Algoritmo ávido: Monedas ilimitadas
17
Denominación de Monedas 50 25 5 1
Monedas disponibles
3
4
1 6
• Si hay que devolver la cantidad 110 siguiendo el método del algoritmo
voraz, se tomaría primero una moneda de 50, quedando una cantidad
restante de 60. Como 50 es aún menor que 60, se tomaría otra moneda de
50. Ahora la cantidad restante es 10, por tanto ya tenemos que devolver
una moneda de 5, ya que 50 y 25 son mayores que 10, y por tanto se
desechan. La cantidad a devolver ahora es 5. Se tomaría otra moneda de
5, pero puesto que ya no nos queda ninguna, deberán devolverse 5 de
valor 1, terminando así el problema de forma correcta.
• Solución: Devolver dos monedas de 50, una de 5 y cinco de 1.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Si consideramos además un numero de monedas de cada
denominación no ilimitado deberemos ahora de considerar
que sea posible tomar monedas de cada denominación para
formar la solución
18
fun cambio (monedas_valor[1..n] de nat, monedas[1..n] de nat,
importe: nat) dev cambio[1..n] de nat
m := 1;
mientras (importe > 0) and (m <= n) hacer
si (monedas_valor[m] <= importe) and (monedas[m] > 0)
entonces
monedas[m] := monedas[m] – 1;
cambio[m] := cambio[m] + 1;
importe := importe – monedas_valor[m];
si no
m := m + 1;
fsi
fmientras
si importe > 0 entonces devolver “Error”; fsi
ffun
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Algoritmo ávido: Monedas limitadas
19
• Árboles generadores minimales
• Problema
• Dado un grafo conexo G = (V, A) no dirigido y ponderado con pesos
positivos, calcular un subgrafo conexo T ⊆ G que conecte todos los
vértices del grafo G y que la suma de los pesos de las aristas seleccionadas
sea mínima.
• Solución
• Este subgrafo es necesariamente un árbol: árbol generador minimal o
árbol de recubrimiento mínimo (“minimum spanning tree” [MST]).
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Ejemplo: Algoritmos Greedy sobre grafos
20
• Diseño de redes: redes telefónicas, eléctricas, hidráulicas, de ordenadores,
de carreteras…
• Construcción de redes de mínimo coste
• Refuerzo de líneas criticas
• Identificación de cuellos de botella
• Enrutamiento (evitar ciclos)
• Soluciones aproximadas para problemas NP.
• Algoritmos de agrupamiento (análisis de clúster)
• Algoritmos Greedy para resolver el problema:
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Aplicaciones
• Algoritmo de Kruskal:
• Comenzando con T=∅, considerar las aristas en orden creciente de coste y
añadir las aristas a T salvo que hacerlo suponga la creación de un ciclo.
• Algoritmo de Prim:
• Comenzando con un nodo raíz arbitrario s, hacer crecer el árbol T desde s
hacia afuera. En cada paso, se añade al árbol T el nodo que tenga una
arista de menor coste que lo conecte a otros nodos de T.
• Algoritmo de borrado inverso:
• Comenzando con T=A, considerar las aristas en orden decreciente de coste
y eliminar las aristas de T salvo que eso desconectase T.
21
• Caminos mínimos
• Problema
• Dado un grafo G ponderado con pesos positivos, calcular el camino de
menor peso existente entre un vértice s y otro vértice t.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Ejemplo: Caminos mínimos
22
• El algoritmo de Djikstra es un algoritmo muy único. Inicialmente, se
utiliza un enfoque voraz para conseguir distancias iniciales a los nodos
vecinos. Luego, en el siguiente paso, se comprueba si el valor
calculado es el óptimo global a ese nodo o no. Si no, se comprueba
todos los otros caminos y calcula la distancia óptima a ese
nodo. Luego, basándose en los valores ya calculados de los nodos
anteriores, se calcula el camino más corto para el nodo final. Por lo
tanto, esto es una especie de un enfoque de programación dinámica.
• Así, Djikstra utiliza ambos enfoques y, por tanto, no puede ser
completamente clasificada como "Greedy" o "DP". Es una mezcla de
ambos y por lo tanto, es único. Siempre ha sido un tema debatido. Tal
es la belleza del algoritmo.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
• Algoritmo de Dijkstra (1959)
• Dado un grafo G=(V,A) y un vértice s, encontrar el camino de costo
mínimo para llegar desde s al resto de los vértices en el grafo.
• IDEA: Mantener el conjunto de nodos ya explorados para los cuales ya
hemos determinado el camino más corto desde s…
23
• Para los siguientes 5 grafos detallar la solución de la ruta más corta
del nodo (1) a todos los nodos (Dijkstra) y el árbol recubridor
mínimo mediante Prim y Kruskal.
• Describir de manera detallada los algoritmos y sus pasos.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Ejercicios 07: Ejercicios sobre Dijkstra, Prim y
Kruskal
Ejercicio 01
24
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Ejercicio 02
Ejercicio 03
25
Ejercicio 05
*Se entregará antes del día Miércoles 01 de Julio de 2015
(23:59:59 hora limite).
*Portada y encabezados de pagina.
Análisis de algoritmos
10 Algoritmos ávidos
Prof. Edgardo Adrián Franco Martínez
Ejercicio 04
26