Sie sind auf Seite 1von 42

Paradigmas computacionales

Dividir para conquistar


2. Algoritmos greedy
3. Programacin dinmica
1.

2. Paradigma greedy

Este mtodo generalmente da origen a algoritmos ms simples y ms


rpidos, pero no es tan poderoso o muy aplicable para la solucin de
problemas, como lo es la Programacin Dinmica (PD).
A pesar de que los algoritmos greedy no producen soluciones
ptimas, ellos proporcionan heursticas rpidas (soluciones
estratgicas no optimas) y son usados para hallar buenas
aproximaciones.
Este tipo de algoritmos empieza con la solucin de un subproblema
pequeo, luego construye la solucin de todo el problema

Una aproximacin voraz consiste en que cada


elemento a considerar se evala una nica vez,
siendo descartado o seleccionado, de tal forma que
si es seleccionado forma parte de la solucin, y si es
descartado, no forma parte de la solucin ni volver
a ser considerado para la misma. Una forma de ver
los algoritmos voraces es considerar la estrategia de
Vuelta atrs, en la cual se vuelve recursivamente a
decisiones anteriormente tomadas para variar la
eleccin entonces tomada, pero eliminando esa
recursin y eligiendo la mejor opcin.

El trmino voraz se deriva de la forma en que los


datos de entrada se van tratando, realizando la
eleccin de desechar o seleccionar un determinado
elemento una sola vez.

Al contrario que con otros mtodos algortmicos, no siempre es


posible dar una solucin a un problema empleando un algoritmo
voraz. No todos los problemas son resolubles con algoritmos
voraces.

Los algoritmos voraces tienden a ser bastante eficientes y


pueden implementarse de forma relativamente sencilla. Su
eficiencia se deriva de la forma en que trata los datos, llegando a
alcanzar muchas veces una complejidad de orden lineal. Sin
embargo, la mayora de los intentos de crear un algoritmo voraz
correcto fallan a menos que exista previamente una prueba
precisa que demuestre la correctitud del algoritmo. Cuando una
estrategia voraz falla al producir resultados ptimos en todas las
entradas, en lugar de algoritmo suele denominarse heurstica.
Las heursticas resultan tiles cuando la velocidad es ms
importante que los resultados exactos (por ejemplo, cuando
resultados "bastante buenos" son suficientes).

Ventaja:

Cuando este tipo de algoritmos trabajan, lo hacen bien rpido.

Desventaja:

No siempre trabajan.

Estudiaremos:
1 Problema del cambio de moneda
2 Problema de la Mochila
3 Problema de hallar el rbol Expandido Mnimo
4 Problema de la ruta corta.

Funcin Voraz (esquema):


funcin Voraz (C:conjunto): conjunto
S := conjunto vaco; {la solucin se construye en S}
mientras C <> conjunto vaco y no solucin(S) hacer
x := seleccionar(C);
C := C - {x};
si factible (SU{x}) entonces S := SU{x}
finmientras
si solucin (S) entonces
devolver S
sino
devolver "no hay soluciones
finsi
fin funcin

Problema del cambio de moneda

1) EL PROBLEMA DEL CAMBIO DE


MONEDAS
Dado un conjunto C de N tipos de monedas
con un nmero inagotable de ejemplares
de cada tipo, hay que conseguir, si se
puede, formar la cantidad M empleando
el MNIMO nmero de ellas.

Sistema monetario M: monedas de valor 1, 2, 5, 10, 20, 50, 100, 200


Problema: pagar exactamente n unidades de valor con un mnimo de monedas.
funcin Devolver cambio (n) : conjunto de monedas
const M = {1, 2, 5, 10, 20, 50, 100, 200}; {denominaciones de las monedas}
S := conjunto vaco; {la solucin se construye en S}
ss := 0; {suma de las monedas de S}
mientras ss < n hacer
x := seleccionar mayor elemento factible de M
Si ss + x <= n;
S := S U {una moneda de valor x};
ss := ss + x;
finsi
finmientras
Si solucin (S) entonces
devolver S
Sino
devolver "no hay soluciones";
Fin_si
devolver S
fin funcin

TAMBIEN :

Por qu funciona?
M adecuado y nmero suficiente de monedas.
No funciona con cualquier M:
Ejemplo: M={1, 4, 6}, n=8, S={6, 1, 1} en vez de {4, 4} (ptimo)
Este problema se resolver con Programacin Dinmica
La funcin Devolver cambio es voraz (algoritmos vidos, greedy)
Por qu voraz?
Selecciona el mejor candidato que puede en cada iteracin, sin
valorar consecuencias.
Una vez seleccionado un candidato, decide definitivamente:
- aceptarlo, o
- rechazarlo
sin evaluacin en profundidad de alternativas, sin retroceso...
Algoritmos sencillos: tanto en diseo como en implementacin.
Cuando la tcnica funciona, se obtienen algoritmos eficientes.

Resuelven problemas de optimizacin:


En cada fase, toman una decisin (seleccin),
satisfaciendo un ptimo local segn la informacin disponible,
esperando as, en conjunto, satisfacer un ptimo global.

Manejan un conjunto de candidatos C:


En cada fase, retiran el candidato seleccionado de C,
y si es aceptado se incluye en S:
Conjunto donde se construye la solucin candidatos aceptados.

Utilizan 4 funciones (explcitamente o no):


1. S es Solucin?
2. S es Factible? Puede completarse para obtener una solucin?
3. Seleccin: determina el mejor candidato
4. Objetivo: valora S (relacionada con Seleccin)

Encontrar S: Solucin y optimiza Objetivo (max/min)

2) Problema del cambio de monedas


Enunciado:

"Se pide crear un algoritmo que


permita a una mquina expendedora
devolver el cambio mediante el menor
nmero de monedas posible, considerando
que el nmero de monedas es limitado, es
decir, se tiene un nmero concreto de
monedas de cada tipo".

Solucin: 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. Adems, la
limitacin del nmero de monedas tambin influye en la
optimalidad del algoritmo, el cual devuelve buenas
soluciones bajo determinados conjuntos de datos, pero
no siempre.

Considrense los siguientes ejemplos como demostracin de lo


dicho:

a)
Monedas 50 25 5 1
Cantidad 3 4 1 6
Si hay que devolver la cantidad 110 siguiendo el mtodo del
algoritmo voraz, se tomara primero una moneda de 50,
quedando una cantidad restante de 60. Como 50 es an menor
que 60, se tomara 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 tomara otra
moneda de 5, pero puesto que ya no nos queda ninguna,
debern devolverse 5 de valor 1, terminando as el problema de
forma correcta.

b)
Monedas 6 4 1
Cantidad 3 4 1
Si queremos devolver la cantidad 8, siguiendo el
procedimiento anterior, el algoritmo tomara primero una
moneda de 6, quedando un resto de 2. Tomara 2
monedas de valor 1, Pero slo habiendo una moneda de
1 sol, no se puede hallar solucin. Cuando es fcil ver
que con 2 monedas de valor 4 se obtiene el resultado
pedido.

Algoritmo:

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

Problema de la mochila

rbol Expandido Mnimo

rbol de recubrimiento mnimo


rbol: grafo sin ciclos y conexo
rbol de recubrimiento mnimo (minimum spanning
tree, MST)
rbol que interconecta todos los
nodos el grafo
de forma que la suma de los
pesos de las aristas que lo
forman sea lo menor posible

Hallar el rbol expandido mnimo

Resultado: el rbol expandido mnimo

Algoritmo voraz:
Funcin a minimizar:
longitud del rbol de recubrimiento
Candidatos:
las aristas del grafo
Funcin solucin:
rbol de recubrimiento de longitud mnima
Funcin factible:
el conjunto de aristas no contiene ciclos
Funcin de seleccin:
- Seleccionar la arista de menor peso que an no ha sido
seleccionada y que no forme un ciclo (Algoritmo Kruskal)
- Seleccionar la arista de menor peso que an no ha sido
seleccionada y que forme un rbol junto con el resto de
aristas seleccionadas (Algoritmo Prim)

Algoritmo de Kruskal
Seleccionar la arista de menor peso
que:
an no haya sido seleccionada
y que no conecte dos nodos de la misma
componente conexa
- es decir, que no forme un ciclo

Algoritmo de Prim
Comenzando por un nodo cualquiera,
seleccionar la arista de menor peso que:
an no haya sido seleccionada
y que forme un rbol junto con el resto de
aristas seleccionadas

COMPLEMENTOS:

Observacin: No se producen rechazos.


Teorema: Prim calcula el rbol expandido mnimo.
Demostracin por induccin sobre |T| y utilizando el lema anterior.

Observaciones:
-

Existen algoritmos ms eficientes, ms


sofisticados, ms recientes (Kruskal es de
1956, Prim de 1957 [1930]).

- Son ejemplos importantes de aplicacin de la


tcnica voraz.
Contrastar con la funcin voraz (ejercicio).

Problema de la ruta corta


TRABAJO DE EXPOSICION

Das könnte Ihnen auch gefallen