Articulo de referencia

Algoritmo voraz

Un algoritmo voraz es aquel que , en cada paso, toma la decisión que es localmente óptima y, posteriormente, no reconsidera las decisiones anteriores. Los algoritmos voraces se ...

Un algoritmo voraz es aquel que , en cada paso, toma la decisión que es localmente óptima y, posteriormente, no reconsidera las decisiones anteriores. Los algoritmos voraces se utilizan a menudo para resolver problemas de optimización combinatoria . Si un problema de optimización depende únicamente de la solución parcial de un subproblema, podemos resolverlo de forma "voraz" considerando solo el subproblema localmente óptimo. En este sentido, un algoritmo voraz es un caso especial de un algoritmo de programación dinámica . Uriel Feige [ 1 ] señala que:

Los algoritmos voraces pueden considerarse la forma definitiva de programación dinámica, en la que solo se mantiene una solución parcial. Para que este enfoque funcione, el problema debe tener una estructura mucho más definida.

En muchos casos, un algoritmo voraz no produce una solución exacta, pero puede generar soluciones que se aproximan a una solución exacta en un tiempo razonable. [ 2 ]

Un ejemplo de un problema que admite una solución voraz exacta es el problema de selección de actividades . Dada una colección de tareas que se pueden realizar entre intervalos de tiempo asignados, el problema consiste en determinar el número máximo de tareas que se pueden realizar. Un algoritmo voraz enO(norteregistro(norte)){\displaystyle O(n\log(n))}que resuelve este problema ordena las tareas por hora de finalización y luego elige repetidamente la primera tarea que comienza después de que terminó la última tarea.

Muchos algoritmos clásicos en ciencias de la computación, como el algoritmo de codificación de Huffman , el algoritmo de Prim , el algoritmo de Kruskal y el algoritmo de Dijkstra , utilizan propiedades voraces en su diseño. Los matemáticos también utilizan con frecuencia estrategias voraces en demostraciones. Un ejemplo clásico es lo que Raphael Yuster denomina la demostración voraz [ 3 ] de que todo torneo en un grafo contiene un camino hamiltoniano .

Caracterizaciones

Dado que no existe una definición formal de lo que es un algoritmo voraz, [ 4 ] no se conoce una caracterización completa de cuándo un problema admite un algoritmo voraz como solución. Sin embargo, se han identificado casos especiales. Jack Edmonds demostró que un algoritmo voraz puede utilizarse para resolver una clase de problemas de optimización combinatoria lineal con una estructura de matroide. [ 5 ]

Posteriormente, Bernhard Korte y László Lovász caracterizaron una clase más amplia de problemas de optimización al introducir la noción de greedoide . Esto permitió, por ejemplo, demostrar la optimalidad del algoritmo de Prim .

Los algoritmos que deshacen pasos anteriores no son voraces. Por ejemplo, el algoritmo de Gale-Shapley no es un algoritmo voraz, ya que, si bien construye una solución eligiendo el mejor emparejamiento actual, en el proceso las soluciones existentes pueden modificarse.

Exactitud

Una técnica utilizada para demostrar la optimalidad de los algoritmos voraces es el argumento de intercambio. [ 6 ] El argumento de intercambio demuestra que cualquier solución diferente de la solución voraz es, como máximo, tan buena como la solución voraz. Este patrón de prueba generalmente sigue estos pasos:

  1. Supongamos que existe una solución óptima diferente de la solución voraz.
  2. Consideremos el primer punto donde difieren las soluciones óptima y voraz.
  3. Demuestra que intercambiar la opción óptima por la opción codiciosa en este punto no puede empeorar la solución codiciosa.
  4. Concluya por inducción que la solución voraz es la óptima.
Ejemplos de cómo un algoritmo voraz puede no lograr la solución óptima.
Partiendo de A, un algoritmo voraz que intenta encontrar el máximo siguiendo la mayor pendiente encontrará el máximo local en "m", sin tener en cuenta el máximo global en "M".
Para alcanzar la suma más grande, en cada paso, el algoritmo voraz elegirá lo que parezca ser la opción inmediata óptima, por lo que elegirá 12 en lugar de 3 en el segundo paso, y no alcanzará la mejor solución, que contiene 99.

Otros ejemplos

  • En el problema de la mochila fraccionaria , se dispone de una lista de artículos con pesos y valores. El objetivo es elegir cantidades fraccionarias de cada artículo de manera que se maximice el valor total y el peso sea inferior a una restricción fija. A diferencia del problema de la mochila , que se sabe que es NP-difícil , el problema de la mochila fraccionaria admite un algoritmo voraz de tiempo polinomial.
  • Existen instancias del problema de la moneda de Frobenius que admiten soluciones voraces. Sin embargo, en algunos casos, el algoritmo voraz no produce una solución óptima. [ 7 ]
  • La búsqueda de coincidencia es un ejemplo de un algoritmo voraz aplicado a la aproximación de señales.
  • Un algoritmo voraz encuentra la solución óptima al problema de Malfatti de encontrar tres círculos disjuntos dentro de un triángulo dado que maximicen el área total de los círculos; se conjetura que el mismo algoritmo voraz es óptimo para cualquier número de círculos.
  • En el aprendizaje mediante árboles de decisión , se suelen utilizar algoritmos voraces; sin embargo, no garantizan encontrar la solución óptima.
    • Un algoritmo popular de este tipo es el algoritmo ID3 para la construcción de árboles de decisión.
  • Un algoritmo voraz construye la representación de Zeckendorf (o codificación de Fibonacci) de un número natural. Restando repetidamente el mayor número de Fibonacci menor o igual al número natural, se obtiene su representación de Zeckendorf. El algoritmo voraz se deriva de la prueba de existencia de la representación de Zeckendorf. La unicidad de la representación de Zeckendorf garantiza que ninguna otra suma de Fibonacci no consecutiva puede dar un resultado diferente.
  • Fibonacci describió un algoritmo voraz para calcular fracciones egipcias .
  • Los algoritmos voraces aparecen en el enrutamiento de redes . Mediante el enrutamiento voraz, un mensaje se reenvía al nodo vecino que está más cerca del destino. La noción de ubicación de un nodo (y, por lo tanto, su cercanía) puede determinarse por su ubicación física, como en el enrutamiento geográfico utilizado por las redes ad hoc . La ubicación también puede ser una construcción completamente artificial, como en el enrutamiento de mundo pequeño y las tablas hash distribuidas .

Algoritmos voraces en grafos

La teoría de grafos es una fuente inagotable de algoritmos voraces. Los informáticos utilizan con frecuencia algoritmos voraces para calcular invariantes de grafos.

Los algoritmos voraces también se utilizan para encontrar cotas superiores para los números cromáticos [ 8 ] . Un ejemplo sencillo es la cotaχ(GRAMO)Δ(GRAMO)+1{\displaystyle \chi (G)\leq \Delta (G)+1}obtenido por un algoritmo voraz. [ 9 ] Comenzamos tomando un vértice que no ha sido coloreado. Dado que tiene como máximoΔ(GRAMO){\displaystyle \Delta (G)}vecinos, como muchoΔ(GRAMO){\displaystyle \Delta (G)}Los colores se utilizan en vértices adyacentes, dejando un color libre para el vértice en cuestión.

Algoritmos de aproximación voraz

Una solución al problema del viajante de comercio NP-completo se puede aproximar comenzando desde un conjunto de aristas vacío y luego agregando la siguiente arista más barata que es un subgrafo de un recorrido completo. Se ha demostrado que este algoritmo voraz produce como máximoΘ(registronorte){\displaystyle \Theta (\log n)}veces más largo que el recorrido óptimo. [ 10 ]

Otro ejemplo es que una solución para el problema de la mochila 0-1 puede aproximarse utilizando el algoritmo voraz para el problema de la mochila fraccionaria . Se ha demostrado que este algoritmo voraz produce una solución con un valor al menos la mitad del de la solución óptima. [ 11 ]

Las soluciones para la maximización submodular se aproximan utilizando un algoritmo voraz que produce una solución al menos la mitad del valor de la solución óptima. [ 12 ]

Los problemas para los que se utilizan algoritmos voraces para proporcionar algoritmos de aproximación incluyen el problema de cobertura de conjuntos , el equilibrio de carga , el árbol de Steiner y el problema de conjuntos independientes [ 13 ] .

Véase también

Referencias

  1. Feige, Uriel. "Algoritmos voraces y matroides" (PDF) . Departamento de Ciencias de la Computación y Matemáticas Aplicadas, Instituto Weizmann de Ciencias . Consultado el 30 de abril de 2026 .
  2. van Melkebeek, Dieter. "Aproximaciones codiciosas" (PDF) . Universidad de Wisconsin-Madison . Consultado el 25 de julio de 2025 .
  3. Yuster, Raphael (enero de 2021). "Caminos con muchos atajos en torneos". Matemáticas Discretas . 344 (1) 112168. arXiv : 2009.13985 . doi : 10.1016/j.disc.2020.112168 .
  4. "Clase 1 – Fundamentos y algoritmos voraces" (PDF) . KTH Social . KTH Royal Institute of Technology . Consultado el 30 de abril de 2026 .
  5. Edmonds, Jack (diciembre de 1971). "Matroides y el algoritmo voraz" . Programación matemática . 1 (1): 127– 136. doi : 10.1007/BF01584082 . ISSN 0025-5610 . 
  6. Erickson, Jeff (2019). "Algoritmos voraces". Algoritmos . Universidad de Illinois en Urbana-Champaign.
  7. Gupta, Shreya; Huang, Boyang; Impagliazzo, Russell (27-11-2024), El problema del cambio de monedas codicioso , arXiv : 2411.18137
  8. Campos, Victor; Gyárfás, András; Havet, Frédéric; Linhares Sales, Claudia; Maffray, Frédéric (abril de 2010). Nuevas cotas para el número de Grundy de productos de grafos (Informe técnico). INRIA. RR-7243.
  9. Diestel, Reinhard (2025). Teoría de grafos . Textos de Posgrado en Matemáticas (Sexta Edición 2025 ed.). Erscheinungsort nicht ermittelbar: Springer. ISBN  978-3-662-70106-5.
  10. Brecklinghaus, Judith; Hougardy, Stefan (1 de mayo de 2015). "La razón de aproximación del algoritmo voraz para el problema del viajante de comercio métrico" . Operations Research Letters . 43 (3): 259– 261. doi : 10.1016/j.orl.2015.02.009 . ISSN 0167-6377 . 
  11. Nelson, Jelani (7 de marzo de 2017). "Clase 13: Ejemplos de PTAS/FPTAS/FPRAS; Algoritmos de aproximación mediante SDP" (PDF) . CS 224: Algoritmos avanzados, primavera de 2017. Autor: Hongyao Ma. Universidad de Harvard . Consultado el 1 de mayo de 2026 .
  12. Grimsman, David; Hespanha, Joao P.; Marden, Jason R. (17-19 de diciembre de 2018). Strategic Information Sharing in Greedy Submodular Maximization . IEEE Conference on Decision and Control. Miami, Florida: IEEE. pp. 2722–2727 . doi : 10.1109/CDC.2018.8619166 . ISBN  978-1-5386-1395-5.
  13. "Clase 5: Introducción a los algoritmos de aproximación" (PDF) . Algoritmos avanzados (2IL45) — Apuntes del curso . TU Eindhoven. Archivado (PDF) del original el 09/10/2022.

Fuentes

  • Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2001). "16 algoritmos codiciosos" . Introducción a los algoritmos . Prensa del MIT. págs.  370–. ISBN 978-0-262-03293-3.
  • Gutin, Gregory; Yeo, Anders; Zverovich, Alexey (2002). "El viajante de comercio no debería ser codicioso: análisis de dominación de heurísticas de tipo codicioso para el TSP" . Matemáticas Aplicadas Discretas . 117 ( 1–3 ): 81–86 . doi : 10.1016/S0166-218X(01)00195-0 .
  • Bang-Jensen, Jørgen; Gutin, Gregory; Yeo, Anders (2004). "Cuando falla el algoritmo voraz" . Optimización discreta . 1 (2): 121– 127. doi : 10.1016/j.disopt.2004.03.007 .
  • Bendall, Gareth; Margot, François (2006). "Resistencia de tipo voraz a problemas combinatorios" . Optimización discreta . 3 (4): 288– 298. doi : 10.1016/j.disopt.2006.03.001 .
  • Feige, U. (1998). "Un umbral de ln n para aproximar la cobertura de conjuntos" ( PDF) . Journal of the ACM . 45 (4): 634– 652. doi : 10.1145/285055.285059 . S2CID 52827488. Archivado (PDF) del original el 9 de octubre de 2022. 
  • Nemhauser, G.; Wolsey, LA; Fisher, ML (1978). "Análisis de aproximaciones para maximizar funciones de conjuntos submodulares—I" . Mathematical Programming . 14 (1): 265– 294. doi : 10.1007/BF01588971 . S2CID 206800425 . 
  • Buchbinder, Niv; Feldman, Moran; Naor, Joseph (Seffi); Schwartz, Roy (2014). «Maximización submodular con restricciones de cardinalidad» (PDF) . Actas del vigésimo quinto simposio anual ACM-SIAM sobre algoritmos discretos . Sociedad de Matemáticas Industriales y Aplicadas. doi : 10.1137/1.9781611973402.106 . ISBN 978-1-61197-340-2Archivado (PDF) del original el 09/10/2022 .
  • Krause, A.; Golovin, D. (2014). «Maximización de funciones submodulares» . En Bordeaux, L.; Hamadi, Y.; Kohli, P. (eds.). Tratabilidad: Enfoques prácticos para problemas difíciles . Cambridge University Press. pp. 71–104 . doi : 10.1017/CBO9781139177801.004 . ISBN  9781139177801.
  • Papadimitriou, Christos H. ; Steiglitz, Kenneth (1998). Optimización combinatoria: algoritmos y complejidad . Dover.