Das Problem ist NP-schwer für wobei A die endliche Sprache ist, die die folgenden Wörter enthält:L=A∗A
- , x 000 ,x111x000
- , y 010 , y 001 ,y100y010y001
- , 01 c 10 , 10 c 01 und 11 c 0000 c 1101 c 1010 c 0111 c 00
Die Reduzierung ist auf das Problem der Graph-Orientierung zurückzuführen, das als NP-hart bekannt ist (siehe https://link.springer.com/article/10.1007/s00454-017-9884-9 ). In diesem Problem erhalten wir ein 3-reguläres ungerichtetes Diagramm, in dem jeder Scheitelpunkt entweder mit " " oder " { 0 , 3 } " gekennzeichnet ist. Das Ziel ist es, die Kanten des Graphen so auszurichten, dass der Außengrad jedes Scheitelpunkts in der Menge liegt, die diesen Scheitelpunkt kennzeichnet.{ 1 }{ 0 , 3 }
Die Reduktion muss als Eingabe eine Graph Orientation-Instanz nehmen und eine Liste von Tripeln als Ausgabe erzeugen. Bei dieser Reduzierung erfüllen die von uns ausgegebenen Tripel immer bestimmte Einschränkungen. Diese Einschränkungen sind unten aufgeführt, und wir werden auf eine Liste von Tripeln als gültig verweisen, wenn und nur wenn sie diese Einschränkungen erfüllen:
- Die Zeichen , y und c erhalten nur Intervalle, die genau einen Index enthalten. Mit anderen Worten, wenn diese Zeichen platziert werden, werden sie an bestimmten Stellen platziert.xyc
- Für jedes Tripel , das in der Instanz mit i ∈ { 0 , 1 } vorhanden ist , ist auch das Tripel ( 1 - i , l , r ) vorhanden.( i , l , r )i ∈ { 0 , 1 }( 1 - i , l , r )
- Wenn und ( α ' , l ' , r ' ) beide in dem Fall vorhandene Tripel sind, dann ist entweder l < l ' ≤ r ' < r oder l ' < l ≤ r < r ' oder { α , α ′ } = { 0 , 1 } mit l = l( α , l , r )( α′, l′, r′)l < l′≤ r′< rl′< l ≤ r < r′{α,α′}={0,1} .l=l′<r=r′
- Wenn ein Tripel ist, dann ist die Anzahl der Tripel ( α ' , l ' , r ' ) mit l ≤ l ' ≤ r ' ≤ r genau r - l + 1 .(α,l,r)(α′,l′,r′)l≤l′≤r′≤rr−l+1
Beachten Sie das folgende Lemma, das am Ende dieses Beitrags bewiesen wurde.
Lemma: Für eine gültige Liste von Tripeln müssen die Zeichen , y und c genau so platziert werden, wie es durch die Tripel angegeben ist, und für jedes Paar von Tripeln ( 0 , l , r ) und ( 1 , l , r ) muss das Zwei Zeichen für dieses Tripel müssen an den Indizes l und r platziert werden .xyc(0,l,r)(1,l,r)lr
Dann ist die Idee der Reduktion die folgende.
Wir verwenden Paare von Tripeln und ( 1 , l , r ) , um Kanten darzustellen. Die Kante verläuft zwischen den Endpunkten am Index l und am Index r . Unter der Annahme, dass wir eine gültige Liste von Tripeln erstellen, müssen die Zeichen aus diesen beiden Tripeln bei l und r platziert werden , damit wir die Reihenfolge, in der sie platziert werden, so behandeln können, dass sie die Richtung der Kante angeben. Hier ist 1 der "Kopf" der Kante und 0 ist der "Schwanz". Mit anderen Worten, wenn die 1 bei r platziert wird(0,l,r)(1,l,r)lrlr101rdann zeigt die Kante von nach r und wenn die 1 bei l liegt, dann zeigt die Kante von r nach l .lr1lrl
Um Scheitelpunkte darzustellen, platzieren wir ein oder y- Zeichen an einem Index und verwenden die nächsten drei Zeichen als Endpunkte der drei Kanten, die den Scheitelpunkt berühren. Beachten Sie, dass, wenn wir ein x platzieren , alle drei Kanten am Scheitelpunkt in die gleiche Richtung zeigen müssen (alle in den Scheitelpunkt oder alle außerhalb des Scheitelpunkts), und zwar einfach aufgrund der Zeichenfolgen, die in der endlichen Sprache A vorliegen . Solche Scheitelpunkte haben einen Grad von 0 oder 3 , daher platzieren wir ein x genau für die mit { 0 , 3 } bezeichneten Scheitelpunkte . Wenn wir ein y setzenxyxA03x{ 0 ,3}yAufgrund der Zeichenfolgen in muss genau eine der drei Kanten am Scheitelpunkt in dieselbe Richtung zeigen . Solche Scheitelpunkte haben einen Außengrad von 1 , daher platzieren wir ein y genau für die mit { 1 } bezeichneten Scheitelpunkte .A1y{ 1}
In gewissem Sinne sind wir fertig. Insbesondere sollte die Entsprechung zwischen dem Lösen dieser Instanz und dem Lösen der Graph Orientation-Instanz klar sein. Leider ist die Liste der von uns produzierten Tripel möglicherweise nicht gültig, und die beschriebenen "Kanten" funktionieren möglicherweise nicht wie beabsichtigt. Insbesondere ist die Liste der Tripel möglicherweise nicht gültig, da die Bedingung, dass die Intervalle der Tripel immer einander enthalten müssen, möglicherweise nicht zutrifft: Die Intervalle von zwei Kanten können sich überlappen, ohne dass eine die andere enthält.
Um dem entgegenzuwirken, fügen wir etwas mehr Infrastruktur hinzu. Insbesondere fügen wir "Crossover-Vertices" hinzu. Ein Überkreuzungsscheitelpunkt ist ein Scheitelpunkt vom Grad dessen Kanten so gepaart sind, dass innerhalb jedes Paares eine Kante in den Überkreuzungsscheitelpunkt und eine Kante nach außen zeigen muss. Mit anderen Worten, ein Kreuzungsscheitelpunkt verhält sich genauso wie nur zwei "sich kreuzende" Kanten. Wir stellen einen Kreuzungsscheitelpunkt dar, indem wir das Zeichen c an einem Index i platzieren . Beachten Sie dann, dass die Sprache A die Zeichen bei i - 1 und i + 2 auf das Gegenteil (eine 0 und eine 1 ) und die Zeichen bei i - 2 beschränkt4cichEINich -1i +201ich -2und , um gegenüber zu sein. Wenn wir also diese Indizes als Endpunkte für die vier Kanten am Kreuzungsscheitelpunkt verwenden, ist das Verhalten genau so, wie es beschrieben wurde: Die vier Kanten sind paarweise und unter jedem Paar ein Punkt ein und ein Punkt aus.i +1
Wie platzieren wir eigentlich diese Überkreuzungen? Angenommen, wir haben zwei Intervalle und ( l ′ , r ′ ), die sich überlappen. WLOG, l < l ' < r < r ' . Wir fügen das Crossover-Zeichen in die Mitte ein (zwischen l ' und r ). (Nehmen wir an, wir haben die ganze Zeit über alles so weit voneinander entfernt, dass immer genug Platz vorhanden ist, und am Ende werden wir alle nicht verwendeten Leerzeichen entfernen.) Lassen Sie den Index des Crossover-Zeichens i sein . Dann ersetzen wir die vier Tripel ( 0( l , r)(l′,r′)l <l′< r <r′l′rich , ( 1 , l , r ) , ( 0 , l ' , r ' ) und ( 1 , l ' , r ' ) mit acht Dreiergruppen zu je zwei (eine mit dem Zeichen 0 und eine mit dem Zeichen 1) ) für die folgenden vier Intervalle ( l , i - 1 ) , ( i + 2 , r )( 0 , l , r )( 1 , l , r )( 0 ,l′,r′)( 1 ,l′,r′)01( l , i - 1 )( i + 2 , r ), , ( i + 1 , r ' ) . Beachten Sie, dass sich die Intervalle nicht mehr schlecht überlappen! (Wenn sich nach dieser Änderung zwei Intervalle überlappen, liegt eines genau in dem anderen.) Außerdem wird die Kante von l nach r durch eine Kante von l nach dem Kreuzungsscheitelpunkt ersetzt, gefolgt von der Kante von dort nach r . Diese beiden Kanten sind am Kreuzungsscheitelpunkt so gepaart, dass eine nach innen und eine nach außen weist. Mit anderen Worten, die beiden Kanten zusammen verhalten sich genauso wie die eine Kante, die sie ersetzen.(l′, i - 2 )( i + 1 ,r′)lrlr
In gewissem Sinne werden durch das Einfügen dieses Kreuzungsscheitels zwei Kanten "ungekreuzt" (deren Intervalle sich überlappten). Es ist leicht zu erkennen, dass durch das Hinzufügen des Kreuzungsscheitelpunkts keine zusätzlichen Kanten gekreuzt werden können. Somit können wir jedes Paar sich kreuzender Kanten durch Einfügen von genügend Kreuzungsscheitelpunkten aufheben. Das Endergebnis entspricht immer noch der Instanz "Graph Orientation", aber jetzt ist die Liste der Tripel gültig (die Eigenschaften sind alle leicht zu überprüfen, da wir alle Kreuzungskanten "nicht gekreuzt" haben). Daher gilt das Lemma. Die Kanten müssen sich wie beschrieben verhalten und die Entsprechung ist tatsächlich eine Äquivalenz. Mit anderen Worten ist diese Reduzierung korrekt.
Beweis der Deckspelze
Lemma: Für eine gültige Liste von Tripeln müssen die Zeichen , y und c genau so platziert werden, wie es durch die Tripel angegeben ist, und für jedes Paar von Tripeln ( 0 , l , r ) und ( 1 , l , r ) muss das Zwei Zeichen für dieses Tripel müssen an den Indizes l und r platziert werden .xyc( 0 , l , r )( 1 , l , r )lr
Beweis:
Wir gehen durch Induktion auf die Tripel nach Intervalllänge vor. Insbesondere lautet unsere Aussage wie folgt: Für jedes wenn ein Tripel die Intervalllänge k hat, muss das Zeichen in diesem Tripel wie im Lemma beschrieben platziert werden.kk
Basisfall: Für muss das Tripel ein Zeichen x , y oder c am einzelnen Index innerhalb des Intervalls platzieren. Dies ist genau wie im Lemma beschrieben.k = 0xyc
Induktiver Fall: Nehmen wir an, dass die Aussage für kleiner als k 'gilt . Betrachten wir nun ein Tripel mit der Intervalllänge k ' . Dann muss dieses Tripel die Form ( i , l , r ) mit r = l + k ' - 1 und i ∈ { 0 , 1 } haben . Das Tripel ( 1 - i , l , r ) muss ebenfalls vorhanden sein. Die Anzahl der Tripel ( αkk′k′( i , l , r )r = l +k′−1i∈{0,1}(1−i,l,r) mit l ≤ l ' ≤ r ' ≤ r ist genau r - l + 1 = k ' . Diese Tripel umfassen die Tripel ( 0 , l , r ) und ( 1 , l , r ), aber auch k ' - 2 andere Tripel der Form ( α ' , l '(α′,l′,r′)l≤l′≤r′≤rr -l+1=k′( 0 , l , r)( 1 , l , r )k′- 2 mit l < l ' ≤ r ' < r . Diese anderen Tripel haben alle eine Intervalllänge kleiner als k ' , daher müssen sie alle ihre Zeichen wie im Lemma angegeben platzieren. Dies kann nur passieren, wenn diese Tripel Zeichen in jedem Index platzieren, die mit Index l + 1 beginnen und mit Index r + 1 enden. So sind unsere beiden Tripel ( 0 , l , r ) und ( 1 , l , r )(α′,l′,r′)l <l′≤r′< rk′l + 1r + 1( 0 , l , r )( 1 , l , r )müssen ihre Zeichen bei den Indizes und r platzieren , wie im Lemma beschrieben, das den induktiven Fall abschließt.lr
Durch Induktion ist das Lemma korrekt.