Testen Sie, ob Buchstaben so geplant werden können, dass ein Wort in einer normalen Sprache gefunden wird


23

Ich fixiere eine reguläre Sprache L auf einem Alphabet Σ und betrachte das folgende Problem, das ich als Briefplanung für L . Informell gibt die Eingabe mir n Buchstaben und ein Intervall für jeden Buchstaben (dh eine minimale und maximale Position), und mein Ziel ist es, jeden Buchstaben in seinem Intervall so zu platzieren, dass keine zwei Buchstaben auf dieselbe Position abgebildet werden und damit die das resultierende n buchstaben-wort ist in L . Formal:

  • Eingabe: n Dreifache (ai,li,ri) wobei aiΣ und 1lirin ganze Zahlen sind
  • Ausgabe: Gibt es eine Bijektion f:{1,,n}{1,,n} so dass lif(i)ri für alle i und af1(1)af1(n)L .

Offensichtlich liegt dieses Problem in NP vor, indem ein Bijekt erraten fund die Mitgliedschaft in L in PTIME überprüft wird . Meine Frage: Gibt es eine reguläre Sprache L so dass das Briefplanungsproblem für L NP-schwer ist?

Einige erste Beobachtungen:

  • Es scheint, dass ähnliche Probleme bei der Planung untersucht wurden: Wir könnten das Problem darin sehen, Stückkostenaufgaben auf einer einzelnen Maschine zu planen, während Start- und Endtermine eingehalten werden. Dieses letztere Problem tritt jedoch offensichtlich in PTIME mit einem gierigen Ansatz auf, und ich sehe in der Planungsliteratur nichts für den Fall, dass Aufgaben beschriftet sind und wir ein Wort in einer regulären Zielsprache erreichen möchten.
  • Ein anderer Weg, um das Problem zu sehen, ist ein Sonderfall eines zweiteiligen Maximum-Matching-Problems (zwischen Buchstaben und Positionen), aber es ist wiederum schwierig, die Einschränkung auszudrücken, dass wir in fallen müssen L.
  • In dem speziellen Fall, in dem L eine Sprache der Form u für ein festes Wort u (z. B. (ab) ), ist das Buchstabenplanungsproblem für L in PTIME mit einem einfachen, gierigen Algorithmus: Bauen Sie das Wort von links auf nach rechts und setze an jede Position einen der verfügbaren Buchstaben, der in Bezug auf korrekt ist Lund die kleinste Zeit ri . (Wenn keine korrekten Buchstaben verfügbar sind, schlagen Sie fehl.) Dies lässt sich jedoch nicht auf beliebige reguläre Sprachen verallgemeinern, Lda wir für diese Sprachen möglicherweise die Wahl haben, welche Art von Buchstaben verwendet werden soll.
  • Es sieht so aus, als ob ein dynamischer Algorithmus funktionieren sollte, aber in Wirklichkeit ist es nicht so einfach: Es scheint, als müssten Sie sich merken, welche Buchstaben Sie bisher genommen haben. Wenn Sie ein Wort von links nach rechts aufbauen und eine Position i , hängt Ihr Zustand davon ab, welche Buchstaben Sie bisher verbraucht haben. Sie können sich nicht den gesamten Satz merken, da es dann exponentiell viele Zustände geben würde. Es ist jedoch nicht so einfach, eine "Zusammenfassung" zu erstellen (z. B. nach der Anzahl der verwendeten Kopien jedes Buchstabens), da Sie sich anscheinend merken müssen, wann Sie sie konsumiert haben (je später Sie sie konsumiert haben), um zu wissen, welche Kopien Sie verwendet haben Je mehr Buchstaben zur Verfügung standen, desto mehr Auch mit einer Sprache wie (ab|ba)Je nachdem, welche Buchstaben Sie später benötigen und wann die Buchstaben verfügbar sein werden , kann es bereits komplizierte Einschränkungen geben, wann Sie sich für und wann für b a entscheiden sollten .abba
  • Da jedoch die reguläre Sprache festgelegt ist und sich nicht so viele Informationen merken kann, fällt es mir schwer, ein NP-schweres Problem zu finden, das ich reduzieren könnte.L

Können Sie NP-Vollständigkeit für einige L in PTIME erhalten?
Lance Fortnow

3
@LanceFortnow Sicher. Sie können einen 3CNF auffüllen, sodass jede Variable in einer geraden Anzahl von Literalen vorkommt und alle zwei aufeinander folgenden Vorkommen negiert werden. Codiere in 0 i oder 1 i , dann sind in der Briefplanungsinstanz die Symbole ( , ) , , fest, während der Rest halb 0 und halb 1 ist . In der Polynomzeit kann überprüft werden, ob die Zeichenfolge eine gepolsterte 3CNF codiert, die als wahr ausgewertet wird. xi0i1i(,),,01
Willard Zhan

Sie können das Problem auch auf "beliebige Positionen" verallgemeinern (nicht auf 1..n beschränkt). Vielleicht ist es einfacher, Härte zu beweisen (wenn es schwer ist).
Marzio De Biasi

@ MarzioDeBiasi: Ich bin mir nicht sicher, ob ich das verstehe. Meinst du, dass die Position von Buchstaben eine beliebige Teilmenge sein kann und nicht ein Intervall? Ich weiß nicht, ob dies schwierig ist (es fängt an, ein bisschen dem exakten Problem der perfekten Übereinstimmung zu ähneln ), aber die Version mit Intervallen lässt einen gierigen Algorithmus zu, wenn also habe ich einige Hoffnung, dass es einfacher sein könnte. L=u
a3nm

@ a3nm: nein, ich meine, Sie könnten das Fallenlassen der Bedingung verallgemeinern ; Sie fragen nach einem Wort in L, in dem sich mindestens ein Buchstabe a i im Bereich befindet [ l i . . r i ] ; Mit anderen Worten, Sie "bauen" nicht das vollständige Wort der Länge n auf , sondern fragen nach einem Wort beliebiger Länge, das die angegebenen Buchstaben in den zulässigen Bereichen enthält. Ich weiß nicht, ob dies die Komplexität des Problems ändert, aber in diesem Fall müssen Sie auf "Indizes" stoßen, die möglicherweise nicht polynomiell durch die Länge der Eingabe begrenzt sind. rinai[li..ri]n
Marzio De Biasi

Antworten:


7

Das Problem ist NP-schwer für wobei A die endliche Sprache ist, die die folgenden Wörter enthält:L=AA

  • , x 000 ,x111x000
  • , y 010 , y 001 ,y100y010y001
  • , 01 c 10 , 10 c 01 und 11 c 0000c1101c1010c0111c00

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}(1i,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<lr<rl<lr<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)llrrrl+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änkt4ciAi1i+201i2und , 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<rlri , ( 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,i1)(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,i2)(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 ( αkkk(i,l,r)r=l+k1i{0,1}(1i,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)llrrrl+1=k(0,l,r)(1,l,r)k2 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<lr<rkl+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.


Vielen Dank für diesen aufwändigen Beweis und mit einer sehr einfachen Sprache! Ich denke, es ist richtig, das einzige, bei dem ich mir nicht sicher bin, ist die Behauptung, dass "das Hinzufügen des Crossover-Vertex keine zusätzlichen Kanten überkreuzen kann". Könnte es nicht sein, dass das Intervall ein anderes Intervall ( l " , r " ) mit l l "r "r enthielt und nun eines von ( l , i - 1 ) und ( ich + 2 ,(l,r)(l,r)llrr(l,i1) kreuzt es? Es scheint, dass der Prozess immer noch konvergieren muss, weil die Intervalle kleiner werden, aber das ist auch nicht ganz klar, weil Kreuzungsscheitelpunkte eingefügt werden. Wie soll ich es sehen? (i+2,r)
a3nm

Wenn , können Sie die neuen Indizes für den neuen Kreuzungsscheitelpunkt unmittelbar rechts von l ' einfügen . Dies führt dazu, dass die neuen Indizes ( i ± a Bit) genau in den Intervallen liegen, die früher l ' enthielten . Es sollte leicht einzusehen sein, dass durch Hinzufügen eines Kreuzungsscheitelpunkts nur dann eine neue Kreuzung mit einem anderen Intervall hinzugefügt werden kann, wenn die neuen Indizes in das andere Intervall fallen. Wenn l ' < l " < r " < r ' dann die neuen Indizes fallen nicht in das Intervall (l<l<r<rli±ll<l<r<r . Wenn l < l < r < r, dann fallen die neuen Indizes möglicherweise in das Intervall ( l , r ) , aber nur, wenn l ' bereits in dieses(l,r)l<l<r<r(l,r)l
Intervall

(Fortsetzung) Intervall. In diesem Fall erstellen Sie nicht tatsächlich eine neue Kreuzung, nur eine alte Kreuzung mit dem alten Intervall drehen in eine neue Kreuzung mit dem Intervall ( i + etwas , r )(l,r)(i+something,r)
Mikhail Rudoy

Ich vermute, in Ihrer zweiten Nachricht meinten Sie "mit dem alten Intervall " und nicht " ( l , r ) "? Aber OK, ich verstehe: Wenn Sie den Kreuzungsscheitelpunkt hinzufügen, wäre der einzig schlechte Fall ein Intervall I , das sich mit einem neuen Intervall überschneidet, ohne sich mit dem entsprechenden Intervall zu überschneiden. Dies kann nicht für Obermengen von ( l , r ) oder von ( l , r ) geschehen : Wenn sie sich mit einem neuen Intervall überlappen, überlappen sie sich mit dem alten. Ebenso für Teilmengen von ( l(l,r)(l,r)I(l,r)(l,r) oder ( l , r ) aus dem Grund, den Sie erklären. Daher stimme ich zu, dass dieser Beweis für mich richtig aussieht. Danke noch einmal! (l,r)(l,r)
a3nm

2

@MikhailRudoy war der erste, der NP-Härte zeigte, aber Louis und ich hatten eine andere Idee, die ich hier skizzieren könnte, da sie etwas anders funktioniert. Wir reduzieren direkt CNF-SAT, das Boolesche Erfüllbarkeitsproblem für CNFs . Im Gegenzug ist die reguläre Sprache , die wir verwenden, komplizierter.L

Der Schlüssel, um Härte zu zeigen, besteht darin, eine Sprache zu entwerfen , die es uns ermöglicht, ein Wort zu erraten und es mehrmals zu wiederholen. Insbesondere werden wir für eine beliebige Anzahl k von Variablen und Anzahl m von Sätzen Intervalle erstellen, die sicherstellen, dass alle Wörter w von L ' , die wir bilden können, mit einem beliebigen Wort u der Länge k auf dem Alphabet { 0 , 1 } beginnen müssen (intuitiv) Codieren einer Schätzung der Bewertung von Variablen), und dann wird dieses Wort u m wiederholtLkmwLuk{0,1}um times (anhand derer wir später testen werden, ob jede Klausel durch die erratene Bewertung erfüllt wird).

Dazu setzen wir das Alphabet und die Sprache L : = ( 0 | 1 ) ( # ( 00 | 11 ) ) ∗ fest # ( 0 | 1 ) . Der formelle Anspruch ist etwas komplizierter:A={0,1,#,0,1}L:=(0|1)(#(00|11))#(0|1)

Behauptung: Für jede Zahl können wir in PTIME eine Reihe von Intervallen aufbauen, so dass die Wörter in L ' , die mit diesen Intervallen gebildet werden können, genau sind:k,mNL

{u(#(u~u~)#(uu))m#u~u{0,1}k}

wobei das Ergebnis der Umkehrung der Reihenfolge von u und des Austauschs von 0 und 1 ist , wobei u ' das Ergebnis der Addition einer Primzahl zu allen Buchstaben in u ist und wobei x y für zwei Wörter x von y von ist Länge p ist das Wort der Länge 2 p, das gebildet wird, indem alternativ ein Buchstabe von x und ein Buchstabe von y genommen wird .u~u01uuxyxyp2pxy

Hier ist eine intuitive Erklärung der Konstruktion, mit der wir dies beweisen. Wir beginnen mit Intervallen, die die anfängliche Vermutung von codieren . Hier ist das Gadget für n = 4 (links) und eine mögliche Lösung (rechts):un=4

Wahl Gadget

Es ist einfach, die folgende Beobachtung zu zeigen ( im Moment zu ignorieren ): Die möglichen Wörter, die wir mit diesen Intervallen bilden können, sind genau u # ˜ u für u { 0 , 1 } k . Dies wird im Wesentlichen wie das Lemma in @ MikhailRudoys Antwort durch Induktion von den kürzesten zu den längsten Intervallen gezeigt: Die mittlere Position muss # enthalten , die beiden benachbarten Positionen müssen eine 0 und eine 1 enthalten usw.Lu#u~u{0,1}k#01

Wir haben gesehen, wie man eine Vermutung anstellt. Nun wollen wir sehen, wie man sie dupliziert. Dazu werden wir uns auf und weitere Intervalle hinzufügen. Hier ist eine Illustration für k = 3 :Lk=3

Duplizierungs-Gadget

Nehmen Sie vorerst . Beobachten Sie, wie wir nach dem ersten # abwechselnd einen ungestrichenen und einen gestrichenen Buchstaben aufzählen müssen. Auf dem nicht gestrichelten Intervalldreieck steht also unsere obige Beobachtung: Auch wenn es so aussieht, als hätten diese Intervalle mehr Platz rechts vom ersten #L:=(0|1)(#(00|11))#(0|1)##kann nur eine von zwei Positionen verwendet werden. Der gleiche Anspruch gilt für die gestrichelten Intervalle. Nun erzwingt weiter, dass, wenn wir einen nicht grundierten Buchstaben aufzählen, der folgende grundierte Buchstabe der gleiche sein muss. So ist es leicht zu sehen , dass die möglichen Worte sind genau: u # ( ~ u~ u ' ) # u ' für u { 0 , 1 } k .Lu#(u~u~)#uu{0,1}k

Um die Behauptung zu zeigen, wiederholen wir diese Konstruktion einfach mal. Hier ist ein Beispiel für k = 3 und m = 2 , wobei nun die reelle Definition von L ' über der Behauptung des Anspruchs verwendet wird:mk=3m=2L

Duplizierungs-Gadget, wiederholt

Nach wie vor könnten wir (durch Induktion über zeigen ) , dass die möglichen Worte sind genau folgende: u ( # ~ u~ u ' # u u ' ) 2 # ~ u für u { 0 , 1 } k . Damit erreicht diese Konstruktion das, was der Claim verspricht.mu(#u~u~#uu)2#u~u{0,1}k

Dank der Behauptung wissen wir, dass wir eine Schätzung einer Bewertung für die Variablen codieren und die Bewertung mehrmals wiederholen können. Es fehlt lediglich eine Erklärung, wie überprüft werden kann, ob die Bewertung der Formel entspricht. Wir werden dies tun, indem wir eine Klausel pro Vorkommen von . Dazu stellen wir fest, dass wir ohne Verlust der Allgemeinheit davon ausgehen können, dass jeder Buchstabe des Wortes durch ein als Eingabe bereitgestelltes Symbol mit Anmerkungen versehen ist. (Formaler: Wir könnten annehmen, dass wir in dem Problem auch ein Wort w der Länge n als Eingabe bereitstellen , und wir fragen, ob die Intervalle ein Wort u bilden können, so dass w u in L istuwnuwuLDer Grund, warum wir dies annehmen können, ist, dass wir die Größe jedes Intervalls verdoppeln und Einheitsintervalle (am unteren Rand des Bildes) an ungeraden Positionen hinzufügen können, um die Anmerkung der entsprechenden geraden Position zu tragen:

Anmerkungen zu den Einheiten

LLLL+ϵ1im+iuiϵL#u+1oder vom Unterwort .0

Dies schließt die Reduktion von CNF-SAT und zeigt NP-Härte des Briefes Scheduling Problem für die Sprache .L

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.