Está bien establecido que por cada matroid y cualquier función peso , no sale de un algoritmo que devuelve una base de peso máximo de . Entonces, ¿la dirección inversa también es verdadera? Es decir, si hay algún algoritmo codicioso, entonces también debe haber alguna estructura matroide.
ds.algorithms
greedy-algorithms
Jan Johannsen
fuente
fuente
Respuestas:
En realidad, la descripción completa y general de un problema que puede resolverse mediante un algoritmo codicioso es una incrustación matroide , que generaliza tanto el concepto de un matroide como el de un greedoide . La respuesta es no: un problema solucionable mediante un algoritmo codicioso no necesita tener una estructura matroide, pero tendrá la estructura de una incrustación matroide (que, por desgracia, es mucho más complicada).
Un modelo mental para algo de esto podría ser encontrar árboles de expansión mínima. La estructura utilizada por el algoritmo de Kruskal es matroide, pero la utilizada por el algoritmo de Prim (que requiere un nodo de inicio) no lo es. (Sin embargo, es un greedoid y una incrustación matroide).
El algoritmo codicioso, definido en términos de este formalismo, es bastante simple: comienza con el conjunto vacío y agrega sucesivamente un solo elemento hasta llegar a una base, siempre asegurándose de que (i) su conjunto sea factible en cada paso, y ( ii) el elemento que agrega maximiza la función objetivo del resultado resultante, wrt. Todos los elementos alternativos que podría haber agregado. (Es decir, conceptualmente, intentas agregar todas las alternativas posibles y eliges la que tenga el valor objetivo más alto).
Quizás podría argumentar que podría haber otras formas de algoritmo codicioso, pero hay varios libros de texto sobre algoritmos y optimización combinatoria que describen este algoritmo basado en un sistema de conjuntos como el algoritmo codicioso. Eso no te impide describir algo que no encaja, pero que aún podría llamarse codicioso, supongo. (Sin embargo, esto hace la cubierta cualquier cosa que podría tener una estructura matroide, por ejemplo, aunque es mucho más general.)
Lo que Helman et al. hacer es que describen cuándo funcionará este algoritmo. Más específicamente:
Muestran que para las funciones objetivas lineales (donde el valor objetivo es la suma de los pesos de los elementos), el algoritmo codicioso funcionará exactamente en la estructura que definen como una inserción matroide;
Dan una caracterización similar para los llamados objetivos de cuello de botella (donde el valor objetivo de un conjunto es igual al mínimo sobre los pesos de elementos individuales); y
Dan una caracterización exacta de qué funciones objetivas (más allá de las lineales) están optimizadas por el algoritmo codicioso en las incrustaciones matroides.
fuente
El algoritmo codicioso no es un concepto formalmente definido. Hay varios modelos que intentan capturar esta noción intuitiva, pero no hay consenso sobre qué es un algoritmo codicioso. A menos que especifique una definición formal de lo que quiere decir con un algoritmo codicioso, la pregunta no puede responderse como sí o no.
Hay una generalización de matroides llamada greedoid que está inspirada en algoritmos codiciosos que es posible que desee ver.
fuente
Considere los siguientes problemas: EURO DE CADENA DE MONEDAS: Dada una cantidad infinita de billetes de 1,2,5,10 euros, pague X euros usando la menor cantidad de billetes posible. Esto se puede resolver utilizando un algoritmo codicioso, que toma la mayor nota posible. Pero no hay una estructura matroide en este problema.
COBERTURA DE AGUJERO: Hay agujeros en las posiciones x_1, x_2, ..., x_n. Tienes parche de longitud 10 cm. Parchea los agujeros usando la menor cantidad de parches posible. Una vez más, esto se puede resolver de manera codiciosa (solo coloque el parche lo más correcto posible), pero no hay una estructura matroide.
fuente