Dato un 3CNF con clausole sulle variabili . Supponiamo che e visualizzati nella formula per un massimo di volte rispettivamente.x 1 , … , x n x i ¯ x i k iϕ1,…,ϕkx1,…,xnxixi¯¯¯¯¯ki
Progettiamo un DAG colorato i cui vertici sono composti da tre parti:G
- Vertici "Assegnazione" e , , . Colora con il "colore" e con .ˉ v i ( j ) 1 ≤ i ≤ n 1 ≤ j ≤ k i v i ( j ) x i ( j )vi(j)v¯i(j)1≤i≤n1≤j≤kivi(j)xi(j)¯ x i (j)v¯i(j)xi¯¯¯¯¯(j)
- Vertici "Clausola" , , . Colora con il colore (o ) se (o , resp.) È il -letterale della clausola , ed è la -esima clausola che contiene questo valore letterale.1 ≤ i ′ ≤ k j ′ = 1 , 2 , 3 w i ′ ( j ′ ) x i ( j ) ¯ x i ( j ) ¯ x i x i j ′ ϕ i ′ jwi′(j′)1≤i′≤kj′=1,2,3wi′(j′)xi(j)xi¯¯¯¯¯(j)xi¯¯¯¯¯xij′ϕi′j
- "Taglia" vertici . Colorali con colori distinti diversi dall'alto.s=s0,s1,…,sn,sn+1,…sn+k=t
I bordi includono:
- , v i ( j ) v i ( j + 1 ) , v i ( k i ) s i ;si−1vi(1)vi(j)vi(j+1)vi(ki)si
- , ˉ v i ( j ) ˉ v i ( j + 1 ) , ˉ v i ( k i ) s i ;si−1v¯i(1)v¯i(j)v¯i(j+1)v¯i(ki)si
- e , w i ′ ( j ′ ) s n + i ′ .sn+i′−1wi′(j′)wi′(j′)sn+i′
Ad esempio, dal 3CNF
viene costruito il seguente grafico (Le direzioni del bordo sono da sinistra a destra).
(x1∨x2∨x3¯¯¯¯¯)∧(x1∨x2¯¯¯¯¯∨x3)
Ora non è difficile vedere che l'originale 3CNF è soddisfacibile se e solo se v'è una - t percorso con diversi colori al vertice in G .stG
(A proposito, è un sottoprodotto che l'esistenza del percorso - T con diversi colori di vertici nel DAG colorato è NP-difficile . Non ho trovato molte letterature su questo problema in prospettiva computazionale. Se lo sai, per favore commento!)stNP-hard
Quindi qual è la relazione tra e il problema OP? Intuitivamente quello che faremo è progettare una matrice h , in modo che ogni colore sia mappato su una riga (che è una persona) e i bordi siano mappati su colonne consecutive (fasce orarie). Pertanto una programmazione massima, che in pratica va da sinistra a destra nella matrice, corrisponde a un percorso s - t .Ghst
La nostra matrice ha 2 n + 1 + ∑ i 2 k i + k colonne, con indici che iniziano da 0 . Nella seguente constrcution X un Y sono due valori soddisfano 1 « X « Y . I rapporti X / 1 , Y / X possono essere grandi potenze di k e n . Sia K i = 2 i + 2 ∑ i jh2n+1+∑i2ki+k0XY1≪X≪YX/1,Y/Xkn.Ki=2i+2∑ij=1ki
- Per ogni , 0 ≤ i ≤ n , let h ( s i , K i ) = h ( s i , K i - k i - 1 ) = h ( s i , K i + k i + 1 + 1 ) = Y (se la coordinata esiste, la stessa sotto).si0≤i≤nh(si,Ki)=h(si,Ki−ki−1)=h(si,Ki+ki+1+1)=Y
- Per ogni , let h ( x i ( j ) , K i - 1 + j ) = X ; Per ogni ¯ x i ( j ) , lasciate h ( ¯ x i ( j ) , K i - 1 + k i + 1 + j ) = X .xi(j)h(xi(j),Ki−1+j)=Xxi¯¯¯¯¯(j)h ( xio¯¯¯¯¯( j ) , Ki - 1+ kio+ 1 + j ) = X
- Per ogni , 1 ≤ i ′ ≤ k e una letterale x nella clausola ϕ i ′ , sia h ( x , K n + i ′ ) = 1 .φio'1 ≤ i'≤ kXφio'h ( x , Kn+ i') = 1
- Tutte le altre voci sono 0.
Ad esempio, per il grafico di esempio sopra è la matrice corrispondente
Ora affermiamo: il 3CNF originale è soddisfacente se e solo se il valore massimo è .( 2 n + 1 ) Y+ ∑ioKioX+ k
Considera che la pianificazione raggiunge il valore massimo. Dato che ci sono esattamente colonne in h contenenti Y , dovrebbero essere tutte coperte. Per la colonna K i + k i + 1 che ha due scelte di Y , supponiamo che la programmazione lo assegni a s i . Poiché la colonna K i deve essere assegnata a s i , per la consecutività dobbiamo perdere le colonne K i + 1 a K i + k( 2 n + 1 )hYKio+ kio+ 1YSioKioSioKio+ 1 . Stesse cose accadono se la programmazione assegna la colonna K i + k i + 1 a s i + 1 .Kio+ kioKio+ kio+ 1Si + 1
Pertanto, per avere il valore , dobbiamo selezionare tutti gli altri X disponibili nella matrice, che corrisponde a un'assegnazione sulle variabili. Quindi il valore residuo di k è ottenibile se e solo se l'assegnazione soddisfa ogni clausola.ΣioKioXXK
In conclusione, decidere il valore massimo di una pianificazione legale è in . Forse è per questo che tutti i nostri precedenti tentativi di trovare un algoritmo fallirono.NP-hard