En combinatoria , una rama de las matemáticas , un matroide ponderado es un matroide dotado de una función que asigna un peso a cada elemento. Formalmente, seaSea E un matroide, donde E es el conjunto de elementos e I es la familia de conjuntos independientes. Un matroide ponderado tiene una función de peso.para asigna un peso estrictamente positivo a cada elemento de. Extendemos la función a subconjuntos depor suma;es la suma deencimaen.
Encontrar un conjunto independiente de peso máximo
Un problema básico relacionado con los matroides ponderados es encontrar un conjunto independiente con un peso total máximo. Este problema se puede resolver utilizando el siguiente algoritmo voraz simple :
- Inicializa el conjunto A como un conjunto vacío. Ten en cuenta que, por definición de matroide, A es un conjunto independiente.
- Para cada elemento x en E \ A , compruebe si Au{x} sigue siendo un conjunto independiente.
- Si no existen tales elementos, entonces deténgase, ya que A no se puede extender más.
- Si existe al menos un elemento de este tipo, elija el que tenga el peso máximo y agréguelo a A.
Este algoritmo no necesita saber nada sobre la estructura del matroide; solo necesita un oráculo de independencia para el matroide, una subrutina para comprobar si un conjunto es independiente.
Jack Edmonds [ 1 ] demostró que este sencillo algoritmo encuentra un conjunto independiente con peso máximo. Denotemos el conjunto encontrado por el algoritmo por e 1 ,...,e k . Por las propiedades de los matroides, es claro que k=rank(M), de lo contrario el conjunto podría extenderse. Supongamos por contradicción que hay otro conjunto con un peso mayor. Sin pérdida de generalidad, es posible suponer que este conjunto también tiene elementos rank(M); denotémoslo por f 1 ,...,f k . Ordenemos estos elementos de manera que w(f 1 ) ≥ ... ≥ w(f k ). Sea j el primer índice para el cual w(f j ) > w(e j ). Apliquemos la propiedad de aumento a los conjuntos {f 1 ,...,f j } y {e 1 ,...,e j-1 }; concluimos que debe haber algún i ≤ j tal que f i podría agregarse a {e 1 ,...,e j-1 } manteniendo su independencia. Pero w(f i ) ≥ w(f j ) > w(e j ), por lo que se debería haber elegido f i en el paso j en lugar de e j , lo cual es una contradicción. [ 2 ]
Ejemplo: algoritmos de bosque de expansión
Como ejemplo sencillo, supongamos que queremos encontrar el bosque de máxima expansión de un grafo. Es decir, dado un grafo y un peso para cada arista, encontrar un bosque que contenga todos los vértices y maximice el peso total de las aristas del árbol. Este problema surge en algunas aplicaciones de agrupamiento. Se puede resolver mediante el algoritmo de Kruskal , que puede considerarse un caso particular del algoritmo voraz anterior aplicado a un matroide gráfico .
Si observamos la definición del matroide de bosque, vemos que el bosque de máxima expansión es simplemente el conjunto independiente con el mayor peso total ; dicho conjunto debe abarcar el grafo, ya que de lo contrario podríamos añadir aristas sin crear ciclos. Pero, ¿cómo lo encontramos?
Encontrar una base
Existe un algoritmo sencillo para encontrar una base:
- Inicialmente dejarsea el conjunto vacío.
- Para cadaen
- sies independiente, entonces establecea.
El resultado es claramente un conjunto independiente. Es un conjunto independiente maximal porque sino es independiente para algún subconjuntode, entoncesTampoco es independiente (la contrapositiva se deduce de la propiedad hereditaria ). Por lo tanto, si descartamos un elemento, nunca tendremos la oportunidad de usarlo más adelante. Generalizaremos este algoritmo para resolver un problema más complejo.
Extensión a óptimo
Un conjunto independiente con el mayor peso total se denomina conjunto óptimo . Los conjuntos óptimos siempre son bases, ya que si se puede añadir una arista, se debe hacer; esto solo aumenta el peso total. Resulta que existe un algoritmo voraz trivial para calcular un conjunto óptimo de un matroide ponderado. Funciona de la siguiente manera:
- Inicialmente dejarsea el conjunto vacío.
- Para cadaen, tomadas en orden (monótonamente) decreciente por peso
- sies independiente, entonces establecea.
Este algoritmo encuentra una base, ya que es un caso especial del algoritmo anterior. Siempre elige el elemento de mayor peso que puede mientras preserva la independencia (de ahí el término "voraz"). Esto siempre produce un conjunto óptimo: supongamos que producey esoAhora, para cualquierconConsideremos conjuntos abiertosy. Desdees más pequeño que, hay algún elemento deque se puede colocar encon el resultado aún siendo independiente. Sin embargoes un elemento de peso máximo que se puede agregar apara mantener la independencia. Por lo tantono tiene un peso menor que algún elemento dey por lo tantoes de al menos un gran peso como. Como esto es cierto para todos,es más pesado que.
Análisis de complejidad
La forma más fácil de recorrer los miembros deen el orden deseado es ordenarlos. Esto requieretiempo utilizando un algoritmo de ordenación por comparación . También necesitamos probar para cada unosies independiente; asumiendo que las pruebas de independencia requierentiempo, el tiempo total para el algoritmo es.
Si en cambio queremos encontrar un árbol de expansión mínima , simplemente "invertimos" la función de peso restándola de una constante grande. Más específicamente, sea, dóndesupera el peso total de todas las aristas del grafo. Muchos más problemas de optimización sobre todo tipo de matroides y funciones de peso pueden resolverse de esta manera tan sencilla, aunque en muchos casos se pueden encontrar algoritmos más eficientes que aprovechan propiedades más especializadas.
Requisito de Matroid
Nótese también que si tomamos un conjuntode conjuntos "independientes" que son un subconjunto pero no un matroide, entonces el algoritmo voraz no siempre funcionará. Porque entonces hay conjuntos independientesycon, pero de tal manera que para ningúnesindependiente.
Elige unyde tal manera que. Pesar los elementos deen el rangoa, los elementos deen el rangoa, los elementos deen el rangoay el resto en el rangoa. El algoritmo voraz seleccionará los elementos dey luego no puede elegir ningún elemento dePor lo tanto, el conjunto independiente que construye tendrá un peso como máximo de ., que es menor que el peso de.
Caracterización
Este algoritmo de optimización puede utilizarse para caracterizar matroides: si una familia F de conjuntos, cerrada bajo la toma de subconjuntos, tiene la propiedad de que, independientemente de cómo se ponderen los conjuntos, el algoritmo voraz encuentra un conjunto de peso máximo en la familia, entonces F debe ser la familia de conjuntos independientes de un matroide. [ 3 ]
Generalizaciones
El concepto de matroide se ha generalizado para permitir otros tipos de conjuntos en los que un algoritmo voraz proporciona soluciones óptimas; consulte greidoid e incrustación de matroides para obtener más información. Korte y Lovász generalizarían estas ideas a objetos llamados greidoides , que permiten resolver clases de problemas aún mayores mediante algoritmos voraces.
Referencias
- ↑ Edmonds, Jack (1971). "Matroides y el algoritmo voraz" . Programación matemática . 1 (1): 127– 136. doi : 10.1007/BF01584082 .
- ↑ Grötschel, Martín ; Lovász, László ; Schrijver, Alejandro (1993). Algoritmos geométricos y optimización combinatoria . Algoritmos y Combinatoria. vol. 2 (Segunda ed.). Springer-Verlag, Berlín. pag. 212.doi : 10.1007 /978-3-642-78240-4 . ISBN 3-540-56740-2MR 1261419 .
- ↑ Oxley, James G. (1992). Teoría de los matroides . Oxford Science Publications. Oxford: Oxford University Press . pág. 64. ISBN 0-19-853563-5. Zbl 0784.05002 .
- teoría de los matroides