El verdadero problema al que me enfrento es el siguiente.
INSTANCIA : tengo juegos y y matriz para todos y .
PREGUNTA : necesito encontrar un subconjunto de de tamaño lo más pequeño posible y particione el conjunto dentro conjuntos disjuntos cuya unión es igual tal que para todos , Yo tengo
Ejemplo:
Dado y la matriz
En este ejemplo, debería ser igual a y y .
Noté dos hechos:
- Si existe alguna tal que para todo entonces y ; y
- Si existe alguna tal que entonces .
Mi pregunta : ¿es posible resolver este problema de optimización en tiempo polinómico (al menos con algoritmo de aproximación)?
Lo primero que intenté hacer es transformarlo en un problema conocido y luego apliqué un algoritmo conocido para eso. Pensé en transformarlo en una tapa de conjunto o en un contenedor de basura, pero fallé y tampoco creo que esto sea interesante.
El problema que intenté formular.
Tengo conjuntos y y la matriz para todo y . Además, tengo conjuntos disjuntos para cada , (agregué como entradas porque de lo contrario no podría formularlo).
Finalmente, obtengo esto:
Gracias.
fuente
Respuestas:
Incluso la versión de decisión de este problema, en la que tratamos de determinar simplemente si existe alguna solución factible, es NP-difícil por reducción de Exact Cover . (La versión de optimización, donde buscamos una solución factible que minimice , es claramente al menos tan difícil como esta).|S|
La matriz de una sola fila y una sola columna que contiene el valor 0.5 es un ejemplo de una entrada para la cual no hay una solución factible. Aquí está otro:
Creación de un gadget "Elija como máximo uno"
Primero, observe que si el valor máximo en alguna fila es , y esta fila contiene (al menos) dos copias de , digamos en y , , entonces no puede contener tanto como , ya que si lo hiciera, entonces debería surgir uno de los siguientes dos casos, cada uno de los cuales conduce a una contradicción:ai x>0 x aij aij′ j′≠j S j j′
De este modo podemos elegir un valor máximo que es con seguridad mayor que la suma de todos los valores que no son máximas en la fila, y el uso de copias de este valor máximo para hacer cumplir que a lo sumo una de esas columnas se incluye en .S
Podemos convertir esta restricción de "elegir como máximo una" en una restricción de "elegir exactamente una" usando cualquier valor positivo menor que 1 como el valor "no máximo". Esto se debe a que cada fila pertenece a alguna parte de la partición de la fila, y si , el RHS de la desigualdad se vuelve negativo para la fila , por lo que no hay forma de satisfacerlo: por lo tanto, al menos un debe ser forzado a modo que .i Kj aij<1 i j S aij≥1
Por lo tanto, para asegurarse de que exactamente una de las columnas en algún conjunto sea forzada a , cree una fila siguiente manera:T⊆N S ai
Por lo tanto, la reducción de Exact Cover es sencilla: hay una fila para cada elemento, una columna para cada conjunto, con siempre que el conjunto incluya el elemento y contrario. Ambas direcciones ("La instancia EC de entrada es una instancia YES una instancia construida del problema de OP es una instancia YES", y "La instancia construida del problema de OP es una instancia YES una instancia EC de entrada es una instancia YES") están claros.aij=n+1 j i aij=0.5 ⟹ ⟹
fuente