Ce problème est NP-difficile par réduction de Vertex Cover.
Dans le problème de couverture de , on nous donne un graphique et un nombre , et notre tâche est de déterminer s'il existe un sous-ensemble d'au plus sommets de telle sorte que chaque bord de soit incident sur au moins un sommet en . (De manière équivalente: est-il possible de tuer chaque arête de en supprimant au plus sommets?)G=(V,E)rUrVEUGr
Premièrement, le partitionnement de en sous-ensembles disjoints équivaut à affecter à chaque élément de exactement l'un des labels possibles. L'idée de base de la réduction est de créer une étiquette pour chaque sommet dans , et de "n'autoriser" à affecter à chaque arête qu'une seule des deux étiquettes correspondant à ses extrémités, dans le sens suivant: attribuer à une arête un correspondant label n'introduit aucune contrainte (authentique) sur les autres bords auxquels la même étiquette peut être affectée, tandis que l'attribution d'un bord à une étiquette non correspondante empêche que tout autre bord se voit attribuer la même étiquette - ce qui a bien sûr pour effet d'augmenter le nombre d'étiquettes distinctes requises.AsAsSjvjV
Pour construire une instance de votre problème à partir d'une instance de Vertex Cover:(A,a,s)(G,r)
- Réglez surEt créer un élément dans pour chaque bord dans . (Ces paires peuvent être considérées comme les entiers ; toute bijection entre elles fera l'affaire.)k|E|(i,j)AvivjE1,…,k
- Réglez sursi ou ; sinon, définissez sur 1.a(b,c),d|E|d=bd=ca(b,c),d
- Définissez .s=r
Si est une instance YES de Vertex Cover, alors il est facile de voir que l'instance juste construite de votre problème est également une instance YES: il suffit de choisir les étiquettes correspondant aux sommets dans n'importe quelle solution , et pour chaque arête affectez l'élément correspondant selon l'une des étiquettes ou été choisie (choisissez arbitrairement si les deux étiquettes ont été choisies). Cette solution utilise sous-ensembles et est valide car les seuls en vigueur sont ceux des correspondants(G,r)SjvjUvbvc∈E(b,c)∈ASbScsaijétiquettes, qui ont pour (non) effet d'empêcher plus debords étant affectés de la même étiquette.|E|
Il reste à montrer qu'une instance YES de votre problème implique que l'original est une instance YES de Vertex Cover. C'est un peu plus compliqué, car une solution valide à peut en général attribuer à un bord une étiquette non correspondante , c'est-à-dire , ce qui signifie que nous ne pouvons pas nécessairement « lire sur » une couverture de sommet valide à partir d' une solution valable .X=(A,a,s)(G,r)YX(i,j)Smm∉{i,j}UY
Cependant, l'attribution d'une étiquette non correspondante a un coût élevé qui limite considérablement la structure de la solution: chaque fois qu'une arête est affectée à une telle étiquette , avec , le fait qu'un assure qu'il doit être le seul bord affecté à cette étiquette. Ainsi, dans toute solution contenant un tel bord non étiqueté de manière correspondante , nous pourrions construire une solution alternative comme suit:(i,j)Smm∉{i,j}a(i,j),m=1Y(i,j)↦SmY′
- Choisissez arbitrairement la nouvelle étiquette pour que soit ou .Sz(i,j)SiSj
- Attribuez cette nouvelle étiquette. Si cela aboutit à une solution invalide, ce doit être parce qu'exactement un autre bord , avait déjà reçu le label . Dans ce cas, définissez et passez à l'étape 1.(i,j)(i′,j′)z∉{i′,j′}Sz(i,j)=(i′,j′)
L'algorithme ci-dessus doit se terminer de deux manières: soit une nouvelle étiquette est trouvée qui n'introduit aucune contradiction, soit un cycle complet de sommets est trouvé. Dans le premier cas, une nouvelle solution valide avec ensembles est trouvée, tandis que dans le dernier cas, une nouvelle solution valide avec ensembles est trouvée; de toute façon, nous avons construit une nouvelle solution valide avec au moins un bord supplémentaire affecté à une étiquette correspondante . Après avoir répété tout ce processusfois, nous aurons produit une solution valide partir de laquelle une solution au problème Vertex Cover d'origine peut être lue.Szs−1s|E|Y′′
Cette construction est clairement polynomiale, il s'ensuit que votre problème est NP-difficile.