Le vrai problème auquel je suis confronté est le suivant.
INSTANCE : j'ai des ensembles et et matrice pour tous et .
QUESTION : J'ai besoin de trouver un sous-ensemble de de taille aussi petite que possible et partitionner l'ensemble dans ensembles disjoints dont l'union est égale de telle sorte que pour tous , J'ai
Exemple:
Soit et la matrice
Dans cet exemple, doit être égal à et K_1 = \ {3 \} et K_2 = \ {1,2 \} .
J'ai remarqué deux faits:
- S'il existe des tels que pour tout alors et ; et
- S'il existe des tels que alors .
Ma question : est-il possible de résoudre ce problème d'optimisation en temps polynomial (au moins avec l'algorithme d'approximation)?
La première chose que j'ai essayé de faire est de le transformer en un problème connu, puis d'appliquer un algorithme connu pour cela. J'ai pensé à le transformer en un ensemble de couvertures ou d' emballages mais j'ai échoué et je ne pense pas non plus que ce soit intéressant.
Le problème que j'ai essayé de formuler.
Je ensembles et et la matrice pour tout et . De plus, j'ai ensembles disjoints pour chaque , (j'ai ajouté en entrée car je ne pouvais pas le formuler autrement.)
Enfin, j'obtiens ceci:
Merci.
la source
Réponses:
Même la version décisionnelle de ce problème, dans laquelle nous essayons de déterminer simplement s'il existe une solution possible, est NP-difficile par réduction à partir d' Exact Cover . (La version d'optimisation, où nous recherchons une solution réalisable qui minimise , est clairement au moins aussi difficile que cela.)|S|
La matrice à une seule ligne et à une seule colonne contenant la valeur 0,5 est un exemple d'entrée pour laquelle il n'existe aucune solution réalisable. En voici une autre:
Création d'un gadget "Choisissez au plus un"
Tout d'abord, notez que si la valeur maximale dans une ligne est , et que cette ligne contient (au moins) deux copies de , disons en et , , alors ne peut pas contenir à la fois et , car si tel était le cas, l'un des deux cas suivants doit se produire, chacun conduisant à une contradiction:ai x>0 x aij aij′ j′≠j S j j′
Ainsi , nous pouvons choisir une valeur maximale qui est en toute sécurité supérieure à la somme de toutes les valeurs non maximales de la ligne, et des copies d'utilisation de cette valeur maximale pour faire respecter ce qui est inclus dans au plus une de ces colonnes .S
Nous pouvons transformer cette contrainte «choisir au plus une» en une contrainte «choisir exactement une» en utilisant toute valeur positive inférieure à 1 comme valeur «non maximale». En effet, chaque ligne appartient à une partie de la partition de ligne, et si alors la RHS de l'inégalité devient négative pour la ligne , il n'y a donc aucun moyen de la satisfaire: donc au moins un doit être forcé dans tel que .i Kj aij<1 i j S aij≥1
Donc, pour vous assurer que l'une des colonnes d'un ensemble est forcée dans , créez une ligne comme suit:T⊆N S ai
Ainsi, la réduction de la couverture exacte est simple: il y a une ligne pour chaque élément, une colonne pour chaque ensemble, avec chaque fois que l'ensemble comprend l'élément et sinon. Les deux directions ("L'instance EC d'entrée est une instance YES instance construite du problème OP est une instance YES", et "L'instance construite du problème OP est une instance YES une instance EC d'entrée est une instance YES") sont clairs.aij=n+1 j i aij=0.5 ⟹ ⟹
la source