Los algoritmos voraces han recibido una atención generalizada en los últimos años. Esta estrategia de resolución de problemas funciona bien en algunos casos, especialmente cuando se enfrentan problemas de optimización combinatoria. El algoritmo codicioso sigue el modo de pensamiento de tomar la mejor decisión actual en cada paso, lo que le permite dar una solución óptima aproximada en un tiempo limitado. Sin embargo, no todos los problemas pueden resolverse de forma óptima utilizando un algoritmo voraz.
Aunque el algoritmo codicioso puede no ser capaz de encontrar la solución óptima absoluta, puede proporcionar la mejor solución aproximada en muchas situaciones.Principios básicos del algoritmo voraz
Los algoritmos codiciosos tienen dos propiedades clave: selectividad codiciosa y subestructura óptima. La selectividad codiciosa significa que la elección realizada en un momento determinado se basa en la mejor opción disponible en ese momento, sin considerar las posibilidades futuras. La subestructura óptima significa que la solución óptima a un problema contiene las soluciones óptimas a sus subproblemas. Estas propiedades permiten que el algoritmo voraz simplifique gradualmente el problema y se acerque gradualmente a la solución final.
Para demostrar la corrección del algoritmo codicioso, se suele utilizar el argumento del intercambio inductivo. Los pasos básicos de este método incluyen asumir que existe una solución óptima que es diferente de la solución codiciosa, identificar el punto donde la solución óptima y la solución codiciosa difieren por primera vez, y demostrar que reemplazar la solución óptima con la opción codiciosa en este punto no no degradar la calidad de la solución, y finalmente concluimos por inducción que existe una solución óptima que es idéntica a la solución codiciosa.
Aunque el algoritmo codicioso funciona bien en algunos problemas, no logra producir soluciones óptimas en otros casos. Tomando como ejemplo el problema del viajante de comercio, para cada número de ciudades existe un ajuste de distancia tal que el método del vecino más cercano produce un itinerario turístico peor y único. Para este tipo de problemas, las ventajas del algoritmo voraz son claramente insuficientes.
Los algoritmos codiciosos se pueden dividir en algoritmos codiciosos puros, algoritmos codiciosos ortogonales y algoritmos codiciosos relajados. Las características comunes de estos algoritmos son su miopía, su irreversibilidad y su aplicabilidad únicamente a problemas con subestructura óptima.
Los algoritmos voraces se han estudiado durante mucho tiempo en la optimización combinatoria y la teoría de la informática. Una serie de artículos explora el desempeño de algoritmos voraces en diferentes problemas, para qué problemas pueden proporcionar soluciones óptimas, qué problemas están garantizados como cercanos a la solución óptima y qué problemas están garantizados como no producir soluciones óptimas.
Los algoritmos voraces han demostrado su eficacia en aplicaciones prácticas. Por ejemplo, al resolver el árbol de expansión mínima, tanto el algoritmo de Kruskal como el de Prim pueden obtener la solución óptima. Además, los algoritmos codiciosos también se utilizan ampliamente en el enrutamiento de red para mejorar la eficiencia de transmisión al reenviar mensajes a los vecinos más cercanos.
En el problema de selección de actividades, el objetivo es seleccionar las actividades que menos se superpongan. El juego Crystal Quest utiliza una lógica similar para recolectar cristales y, en la búsqueda de la optimización de objetivos, el algoritmo codicioso también puede encontrar la mejor solución. Ya sea el algoritmo de Dijkstra o el algoritmo A*, estos métodos pueden proporcionar soluciones efectivas al problema del camino más corto.
La facilidad de uso y la eficiencia del algoritmo voraz lo convierten en la decisión de solución preferida en una variedad de problemas.
En resumen, los algoritmos codiciosos pueden resolver problemas complejos hasta cierto punto, pero pueden producir peores resultados en otros casos. Esto nos hace preguntarnos si, en la búsqueda de la solución óptima, hemos renunciado a algunas opciones que deberíamos reconsiderar.