AGGIORNAMENTO: la risposta qui sotto non è corretta, perché ho erroneamente supposto che il percorso Hamiltoniano sia in un grafico arbitrario, non in . Lo lascio libero, forse sarò in grado di risolverlo o darà alcuni suggerimenti per un'altra risposta.Kn
Penso che sia NP-completo. Questa è un'idea di riduzione molto informale / rapida di 3SAT
Per ogni variabile aggiungo un "gadget variabile" con:Xio
- tre nodi Xio, + Xio, - Xio
- due bordi variabili e ( X i , - X i )( Xio, + Xio)( Xio, - Xio)
Aggiungi un nodo sorgente e collegalo a tutte le variabili X i .SXio
Per ogni clausola aggiungere un nodo C j e collegarlo alle variabili corrispondenti + X i o - X i che costituisce la clausola.CjCj+ Xio- Xio
L'immagine seguente rappresenta: ( + x1∨ - x2∨ - x3) ∧ ( - x2∨ x3∨ x4)
L'insieme (nodi che devono essere collegati) contiene ( S , C 1 ) , ( S , C 2 ) , . . .R( S, C1) , ( S, C2) , . . .
Il percorso semplice dovrebbe includere tutti i bordi "BLU" tranne i bordi variabili ( X i , + X i ) e ( X i , - X i ) (nell'immagine sopra i bordi blu rappresentano i bordi che includiamo in P ).P( Xio, + Xio)( Xio, - Xio)P
A questo punto, la formula iniziale è soddisfacente se e solo se il percorso più breve da a ciascun nodo della clausola C j non è maggiore di tre. Infatti per raggiungere una clausola da S in tre passaggi dobbiamo attraversare almeno una variabile X i : S → X i → ± X i → C j . Quindi dobbiamo attraversare uno dei due bordi: X i → + X i o X i →SCjSXioS→ Xio→ ± Xio→ CjXio→ + Xio e includerlo in CXio→ - Xio)C(perché per costruzione non fa parte di ). Ma entrambi non possono essere inclusi, perché condividono un vertice.P
Ma non siamo sicuri di poter costruire un semplice percorso che includa tutti i bordi blu perché alcuni nodi hanno più di un bordo blu incidente.P
Per risolvere questo problema, sostituiamo ogni nodo con più bordi blu incidente, con un albero che contiene solo coppie di bordi blu incidente che saranno inclusi in e bordi che li separano e che dovrebbero essere inclusi in C per raggiungere i nodi della clausola:PC
Il grafico originale diventa:
KCjS
C
P che attraversa ciascun vertice e ciascun bordo blu, basta aggiungere nodi extra per evitare scorciatoie tra le clausole o le variabili: