Penso che questo problema sia NP-difficile. Provo a disegnare una riduzione da MinSAT. Nel problema MinSAT ci viene dato un CNF e il nostro obiettivo è ridurre al minimo il numero di clausole soddisfatte. Questo problema è NP-difficile, vedi ad esempio http://epubs.siam.org/doi/abs/10.1137/S0895480191220836?journalCode=sjdmec
Dividi i vertici in due gruppi: alcuni rappresenteranno valori letterali, altri clausole, quindi dove v è il numero di variabili del CNF (solitamente indicato con n ) e c è il numero di clausole. Dirigere un bordo da ciascun vertice letterale al vertice della clausola in cui si verifica. Definisci S per un vertice letterale che rappresenta x i come { i , i + v + k } (dove k è un parametro arbitrario), quindi f ( x i )n=2v+cvncSxi{i,i+v+k}k e f ( ˉ x i ) , 2 v + k + 1 , ...f(xi)=i o f ( ˉ x i ) = i e f ( x i ) = i + v + k . Per ogni clausola-vertice, lascia S = { v + 1 , … , v + k ,f(x¯i)=i+v+kf(x¯i)=if(xi)=i+v+k , quindi k dei vertici-clausola sono `` piccoli ''.S={v+1,…,v+k,2v+k+1,…,n}k
Ora il CNF ha un incarico in cui almeno k clausole sono false se e solo se il problema può essere risolto per l'istanza sopra. Il problema MinSAT è esattamente quello di verificare se una formula CNF ha un'assegnazione che rende false almeno k clausole, quindi questo dimostra che il tuo problema è NP-difficile.φk
Per aiutarti a comprendere questa riduzione, ecco l'intuizione: le etichette piccole ( ) corrispondono al valore di verità Falso e le etichette grandi ( v + k + 1 , ... , 2 v + k ) corrispondono a Vero. I vincoli per i vertici letterali assicurano che ogni x i sia True o False e che ¯ x i1,2,…,v+kv+k+1,…,2v+kxixi¯¯¯¯¯ha il valore di verità opposto. I bordi assicurano che se qualsiasi valore letterale è True, anche tutti i vertici-clausola che lo contengono sono assegnati True. (Al contrario, se a tutti i letterali di una clausola è assegnato Falso, questa struttura grafica consente di assegnare al vertice-clausola Falso o Vero.) Infine, la scelta di assicura che k dei vertici-clausola siano assegnati Falso e c - k false (tutti i vertici della clausola a cui è stato assegnato False, più probabilmente alcuni di quelli a cui è stato assegnato True). Viceversa, se esiste un'assegnazione alle variabili che rende almeno k delle clausole di φkkc−k di loro sono assegnati a True. Quindi, se esiste un ordinamento topologico valido di questo grafico, allora c'è un'assegnazione alle variabili che rende almeno delle clausole di φkφkφ falso , allora esiste un tipo topologico valido di questo grafico (compiliamo le etichette per i vertici letterali in modo ovvio; e per ogni clausola di che è vera, diamo al suo corrispondente vertice-clausola un'etichetta che corrisponde a True; le altre clausole-vertici possono ricevere etichette corrispondenti ad un valore di verità arbitrario).φ