Was ist die Komplexität des folgenden Problems?
Eingabe :
- einHamilton-Pfadin
- eine Teilmenge von Knotenpaaren
- eine positive ganze Zahl
Abfrage : Gibt es einen passenden derart , daß für jeden ( v , u ) ∈ R , d G ( v , u ) ≤ k ?
(wobei G = ( [ n ] , M ∪ H ) )
Ich habe mit einem Freund über dieses Problem gesprochen. Mein Freund glaubt, das Problem liege in der Polynomzeit. Ich denke es ist NP-komplett.
Antworten:
Diese Antwort ist falsch .
Dein Freund hat recht. Ihr Problem (wie von Sasho interpretiert) schränkt die Kardinalität des übereinstimmenden . Wählen Sie daher C , um eine Übereinstimmung zwischen den Paaren in R zu erhalten . Dann ist für jede positive ganze Zahl k der Abstand zwischen jedem Paar in R kleiner als k .C C R k R k
Ihr Problem wird interessant, wenn Sie Pfade zwingen, Kanten sowohl aus dem übereinstimmenden als auch aus dem Pfad P zu enthalten .C P
quelle
UPDATE: Die Antwort unten ist nicht korrekt, weil ich fälschlicherweise angenommen habe, dass der Hamilton-Pfad in einem beliebigen Graphen liegt, nicht in . Ich lasse es unberührt, vielleicht kann ich es reparieren oder es gibt einige Hinweise für eine andere Antwort.Kn
Ich denke es ist NP-komplett. Dies ist eine sehr informelle / schnelle Reduzierungsidee von 3SAT
Für jede Variable füge ich ein "variables Gadget" hinzu mit:xi
Fügen Sie einen Quellknoten und verbinden Sie ihn mit allen Variablen X i .S Xi
Fügen Sie für jede Klausel einen Knoten C j hinzu und verbinden Sie ihn mit den entsprechenden Variablen + X i oder - X i , die die Klausel bilden.Cj Cj +Xi −Xi
At this point, the initial formula is satisfiable if and only if the shortest path fromS to each clause node Cj is not greater than three. Indeed to reach a clause from S in three steps we must traverse at least one variable Xi : S→Xi→±Xi→Cj . So we must traverse one of the two edges: Xi→+Xi or Xi→−Xi) and include it into C (because by construction it's not part of P ). But both cannot be included, because they share a vertex.
But we're not sure that we can build a simple pathP that includes all the blue edges because some nodes have more than one incident blue edge.
To fix this we replace each node with multiple incident blue edges, with a tree that contains only pairs of incident blue edges that will be included inP and edges that separate them and that should be included in C to reach the clause nodes:
The original graph becomes:
Each tree should have the same depth (we just can pick the max of the depth required for all the clauses/variables/S); and we must increase the value ofK accordingly (the number of steps to reach Cj from S ).
We can include inC all the needed (not blue) edges required to reach the clause nodes because they share no vertex.
Furthermore with this construction we are able to build a simple pathP that traverse each vertex and each blue edge, just add extra nodes to avoid shortcuts between the clauses or variables:
quelle