Me dan un conjunto , un número entero y números enteros no negativos . Mi problema es encontrar subconjuntos disjuntos de modo que:
- ; y
- para todos y .
¿Cómo resolver este problema? ¿Es difícil encontrar una solución factible?
Creo que no es fácil resolver el problema porque probé un procedimiento que comienza con algunos y asigna hasta el número de asignaron a son mayores que para algunos asignado. Pero esto no es correcto porque podría quedarme de alguna que no podría asignarse a ninguna (debido a su que no podría satisfacerse).
El método de fuerza bruta, cuando tengo que generar todos los subconjuntos de y probar cada uno, funciona para mí ( ) pero muy ineficiente.
Respuestas:
Este problema es NP-duro por reducción de Vertex Cover.
En el problema de la cubierta de vértices, se nos da un gráfico y un número , y nuestra tarea es determinar si hay algún subconjunto de a lo sumo vértices de modo que cada borde en sea incidente en al menos un vértice en . (Equivalentemente: ¿Es posible matar cada borde en eliminando a lo sumo vértices?)G=(V,E) r U r V E U G r
Primero, dividir en subconjuntos disjuntos de es equivalente a asignar a cada elemento en exactamente una de posibles etiquetas. La idea básica de la reducción es crear una etiqueta para cada vértice en , y "permitir" que a cada borde se le asigne solo una de las dos etiquetas correspondientes a sus puntos finales, en el siguiente sentido: asignar a un borde un correspondiente la etiqueta no introduce ninguna restricción (genuina) sobre qué otros bordes pueden asignarse a la misma etiqueta, mientras que asignar un borde a una etiqueta no correspondiente evita que a cualquier otro borde se le asigne la misma etiqueta, lo que por supuesto tiene el efecto de subir el número de distintas etiquetas requeridas.A s A s Sj vj V
Para construir una instancia de su problema a partir de una instancia de Vertex Cover:(A,a,s) (G,r)
Si es una instancia SÍ de Vertex Cover, entonces es fácil ver que la instancia recién construida de su problema también es una instancia SÍ: simplemente elija las etiquetas correspondientes a los vértices en cualquier solución , y para cada arista asigne el elemento correspondiente cualquiera de las etiquetas o (elija arbitrariamente si se seleccionaron ambas etiquetas). Esta solución utiliza subconjuntos de , y es válida porque los únicos en vigor son los correspondientes(G,r) Sj vj U vbvc∈E (b,c)∈A Sb Sc s aij etiquetas, que tienen el efecto (no) de prevenir más deA los bordes se les asigna la misma etiqueta.|E|
Queda por demostrar que una instancia SÍ de su problema implica que el original es una instancia SÍ de Vertex Cover. Esto es un poco más complicado, ya que una solución válida a en general puede asignar un borde una etiqueta no correspondiente , es decir, , lo que significa que no podemos necesariamente "leer off" una cubierta vértice válido a partir de una solución válida .X=(A,a,s) (G,r) Y X (i,j) Sm m∉{i,j} U Y
Sin embargo, asignar una etiqueta no correspondiente tiene un alto costo que limita severamente la estructura de la solución: cada vez que se le asigna un borde dicha etiqueta , con , el hecho que asegura que debe ser el único borde asignado a esta etiqueta. Entonces, en cualquier solución contenga un borde etiquetado de manera no correspondiente , podríamos construir una solución alternativa siguiente manera:(i,j) Sm m∉{i,j} a(i,j),m=1 Y (i,j)↦Sm Y′
El algoritmo anterior debe terminar de una de dos maneras: se encuentra una nueva etiqueta que no introduce contradicción o se encuentra un ciclo completo de vértices. En el primer caso, se encuentra una nueva solución válida con conjuntos , mientras que en el último caso se encuentra una nueva solución válida con conjuntos ; De cualquier manera, hemos construido una nueva solución válida con al menos un borde más asignado a una etiqueta correspondiente . Después de repetir todo este proceso a lo sumoEn ocasiones, habremos producido una solución válida partir de la cual se puede leer una solución al problema original de Vertex Cover .Sz s−1 s |E| Y′′
Esta construcción es claramente un tiempo polinomial, por lo que se deduce que su problema es NP-hard.
fuente