seegongsik
Algoritmos

Cómo funciona un algoritmo voraz

Como vimos con la O grande, el trabajo se dispara en cuanto crece la entrada. Entonces, ¿y si en vez de sopesar todas las opciones, en cada momento te quedaras sin más con lo que parece mejor ahora mismo? Desde luego, es rápido. Pero ¿es siempre la respuesta correcta?

01

Tomar lo mejor de ahora

Supongamos que hay que dar 870 wones de cambio. El método voraz es sencillo: tomar la moneda más grande que puedas dar en este momento.
Una de 500, tres de 100, una de 50 y dos de 10.
Solo tomaste la moneda más grande cada vez, y terminaste enseguida.

cambio restante: 870
esta es la moneda más grande ahora
monedas agarradas

Toca las monedas de la más grande a la más pequeña para tomarlas. (870 wones → 500 · 100 · 100 · 100 · 50 · 10 · 10)

Eso es un algoritmo voraz. No piensa a lo lejos en lo que pasará; simplemente elige lo mejor en este preciso instante.
Como el cálculo es ligero, las decisiones son rápidas.

02

No mira el conjunto

Lo que de verdad distingue al método voraz es que nunca despliega el mapa completo.
En cada bifurcación, solo da un paso hacia el lado que parece mejor ahora. Como no mira a lo lejos, hay poco que pensar y es rápido.
A cambio, nunca vuelve a mirar una decisión ya tomada.

En la bifurcación, haz clic en el lado mayor
esta bifurcación 1/4
camino recorrido:–

En cada bifurcación, toca el número mayor para avanzar un paso. No se ve el mapa completo; solo eliges entre los dos que tienes delante.

No mirar el conjunto es a la vez una virtud y un punto débil. La rapidez es la virtud.
Pero como no ve a lo lejos, un camino que ahora parece bueno puede resultar un callejón sin salida más adelante.
Aun así, en algunos problemas este método rápido encaja a la perfección, casi de forma sorprendente.

03

Cuando funciona bien

Supongamos que quieres meter el mayor número posible de reuniones en una sola sala, sin que los horarios se crucen.
El truco voraz es reservar primero la reunión que termina antes, porque cuanto antes quede libre la sala, más reuniones caben después.
Curiosamente, esta avaricia da la respuesta realmente óptima.

Haz clic primero en la reunión que termina más temprano
reuniones tomadas: –

Toca primero las reuniones que terminan antes para reservarlas. Las que se cruzan quedan fuera solas, y el método voraz llena el máximo de 4.

¿Por qué es esta la respuesta correcta? Al elegir la reunión que termina antes, la sala queda libre lo antes posible.
Así queda el mayor tiempo libre, y en él cabe el mayor número de otras reuniones. Por eso, aunque se sea voraz paso a paso, el conjunto acaba siendo el mejor posible.
En problemas como este, el método voraz es la respuesta.

04

Un contraejemplo en el que falla

Esta vez las monedas son raras: solo hay de 1, 3 y 4, y hay que dar 6 de cambio.
Si vas a lo voraz, de mayor a menor, das una de 4 y luego dos de 1: tres monedas. Pero con dos de 3 bastan dos monedas.
Lo mejor de cada momento se perdió lo mejor del conjunto.

Cambia 6 con monedas 1·3·4. Haz clic en cada vía para comparar.

Toca los dos métodos para compararlos: el voraz (4·1·1 → 3 monedas) y el camino mejor (3·3 → 2 monedas). El voraz cayó en la trampa.

El método voraz falló porque, en cuanto tomó la de 4, los 2 que quedaban solo podían cubrirse con dos de 1.
Un gran paso de ahora arruinó lo que venía después. Por eso acierta con monedas corrientes y falla con monedas descompensadas como estas.
Si el método voraz funciona o no hay que comprobarlo problema por problema.

05

Resumen

En una línea, un algoritmo voraz «elige en cada momento lo que parece mejor ahora». Como no mira el conjunto, es rápido y sencillo.
En algunos problemas, como dar cambio o reservar una sala, es exactamente la respuesta correcta. Pero con monedas raras o caminos enredados, lo mejor de cada momento se convierte en una trampa.
Así que el método voraz es rápido y suele acertar, pero si de verdad acierta hay que comprobarlo en cada problema.

Haz clic en los puntos clave en orden para cerrar

Toca los cuatro puntos clave en orden para resumir: lo mejor ahora → no mira el conjunto → suele acertar → a veces falla.

Si la programación dinámica, que vimos antes, es el método prudente que reúne todas las respuestas pequeñas sin dejarse ninguna, el voraz está en el extremo opuesto: la avaricia más simple, que elige lo bueno de ahora y sigue adelante.
Resulta atractivo por rápido y ligero, pero esa misma sencillez a veces lo hace caer en una trampa.
Cuando ya tengas una idea de cuándo funciona y cuándo no, en la próxima lección veremos otro truco: elegir tirando los dados.

En una líneaUn algoritmo voraz elige en cada momento lo que parece mejor ahora. Como elige paso a paso sin mirar el conjunto, es rápido y sencillo. En algunos problemas, como dar el cambio empezando por la moneda más grande o reservar primero las reuniones que terminan antes, es realmente la respuesta correcta. Pero cuando los tipos de moneda son raros o los caminos están enredados, lo mejor de cada momento puede resultar una trampa en vez de lo mejor del conjunto. Por eso el método voraz es rápido y suele acertar, pero no siempre.
← Algoritmos
¿Te fue útil? Apoyar seegongsik