Questo problema è NP-difficile per riduzione da Vertex Cover.
Nel problema della copertura dei vertici, ci viene dato un grafico e un numero , e il nostro compito è determinare se esiste un sottoinsieme di al massimo vertici da tale che ogni fronte in sia incidente su almeno un vertice in . (Equivalentemente: è possibile uccidere ogni fronte in eliminando al massimo vertici?)G=(V,E)rUrVEUGr
In primo luogo, il partizionamento in sottoinsiemi disgiunti equivale ad assegnare ad ogni elemento in esattamente uno possibili etichette. L'idea di base della riduzione è quella di creare un'etichetta per ciascun vertice in e di "consentire" a ciascun bordo di assegnare solo una delle due etichette corrispondenti ai suoi punti finali, nel senso seguente: assegnare un bordo a un corrispondente etichetta non introduce alcun vincolo (autentico) su quali altri bordi possano essere assegnati alla stessa etichetta, mentre l'assegnazione di un bordo a un'etichetta non corrispondente impedisce a qualsiasi altro bordo di essere assegnato la stessa etichetta - il che ovviamente ha l'effetto di spingere verso l'alto il numero di etichette distinte richieste.AsAsSjvjV
Per costruire un'istanza del tuo problema da un'istanza di Vertex Cover:(A,a,s)(G,r)
- Impostare su, E creare un elemento in per ciascun bordo in . (Queste coppie possono essere pensate come numeri interi ; qualsiasi biiezione tra loro farà.)k|E|(i,j)AvivjE1,…,k
- Impostare suse oppure ; in caso contrario, impostare su 1.a(b,c),d|E|d=bd=ca(b,c),d
- Impostare .s=r
Se è un'istanza YES di Vertex Cover, allora è facile vedere che l'istanza del problema appena costruita è anche un'istanza YES: basta selezionare le etichette corrispondenti ai vertici in qualsiasi soluzione e per ciascun bordo assegnare l'elemento corrispondente qualunque sia stata scelta una delle etichette o (scegliere arbitrariamente se entrambe le etichette sono state scelte). Questa soluzione utilizza sottoinsiemi ed è valida perché le uniche in vigore sono quelle per la corrispondente(G,r)SjvjUvbvc∈E(b,c)∈ASbScsaijetichette, che hanno l'effetto (non) di prevenire più diai bordi viene assegnata la stessa etichetta.|E|
Resta da dimostrare che un'istanza YES del problema implica che l'originale è un'istanza YES di Vertex Cover. Questo è leggermente più complicata, poiché una valida soluzione a può in generale assegnare un bordo un non etichetta -corresponding , cioè, , il che significa che non possiamo necessariamente "leggere" una copertura vertice valida da una soluzione valida .X=(A,a,s)(G,r)YX(i,j)Smm∉{i,j}UY
Tuttavia, l'assegnazione di un'etichetta non corrispondente ha un costo elevato che limita fortemente la struttura della soluzione: ogni volta che un bordo viene assegnato una tale etichetta , con , il fatto che garantisce che debba essere l' unico bordo assegnato a questa etichetta. Quindi, in qualsiasi soluzione contenente un bordo così marcato in modo non corrispondente , potremmo costruire una soluzione alternativa come segue:(i,j)Smm∉{i,j}a(i,j),m=1Y(i,j)↦SmY′
- Scegli arbitrariamente la nuova etichetta affinché sia o .Sz(i,j)SiSj
- Assegna questa nuova etichetta. Se ciò si traduce in una soluzione non valida, deve essere perché esattamente un altro bordo , era già stato assegnato all'etichetta . In tal caso, impostare e andare al passaggio 1.(i,j)(i′,j′)z∉{i′,j′}Sz(i,j)=(i′,j′)
L'algoritmo di cui sopra deve terminare in due modi: viene trovata una nuova etichetta che non introduce alcuna contraddizione oppure viene trovato un ciclo completo di vertici. Nel primo caso, viene trovata una nuova soluzione valida con set di , mentre nel secondo caso viene trovata una nuova soluzione valida con set di ; in entrambi i casi, abbiamo costruito una nuova soluzione valida con almeno un altro bordo assegnato a un'etichetta corrispondente . Dopo aver ripetuto l'intero processo al massimovolte, avremo prodotto una soluzione valida da cui è possibile leggere una soluzione al problema originale di Vertex Cover .Szs−1s|E|Y′′
Questa costruzione è chiaramente un tempo polinomiale, quindi ne consegue che il tuo problema è NP-difficile.