Ihr Problem kann in Polynomzeit gelöst werden.
Konvertieren Sie zunächst die angegebene NFA in eine entsprechende NFA mit den folgenden zusätzlichen Eigenschaften:
- Es gibt keine Epsilon-Übergänge
- Alle Zustände sind vom Startzustand aus erreichbar
Hilfreiche Unterroutine
Angenommen, wir haben eine NFA N. , einen Zustand q und eine nicht leere Zeichenfolge s . Die folgende Sub - Routine wird uns den Wahrheitswert der folgenden Aussage zu bewerten: „jeden Weg in N vom Zustand q zu einem akzeptieren Zustand entspricht einer Zeichenfolge, die ein Präfix der Zeichenfolge sn für einige n .“ Darüber hinaus wird diese Unterroutine in Polynomzeit ausgeführt.
Konstruieren Sie zunächst die NFA S mit |s|+1 Zustände, die alle Zeichenfolgen akzeptieren, die keine Präfixe von sn für n ( |s| Nichtakzeptanzzustände in einer Schleife, um zu verfolgen, wo im "Muster" von sssss… wir sind so weit, und man akzeptiert den Zustand, wenn wir bereits von diesem Muster abgewichen sind). Als nächstes konstruiere die NFA N′ die genau wie N aber q als Startzustand hat. Schließlich konstruieren Sie eine endgültige NFA N′′deren Sprache ist Verwendung der Standard-NFA-Kreuzungskonstruktion. Beachten Sie, dass alle diese Konstruktionen in der Größe der Eingabe polynomisch sind.L(N′′)L(S)∩L(N′)
Testen Sie dann einfach, ob die Sprache von leer ist (was in Polynomzeit mit einer einfachen Graphensuche erfolgen kann). genau dann, wenn , oder mit anderen Worten, jede Zeichenfolge in ist nicht in . Mit anderen Worten, die Sprache von ist genau dann leer, wenn nur Zeichenfolgen akzeptiert, die für einige Präfixe von . Dies kann als genau die Aussage umformuliert werden, die wir zu bewerten versuchten: "Jeder Pfad in vom Zustand zu einem Akzeptanzzustand entspricht einer Zeichenfolge, die ein Präfix der ZeichenfolgeN′′L(N′′)=∅L(S)∩L(N′)=∅L(N′)L(S)N′′N′snnNqsnfür einige . "n
Hauptalgorithmus
Betrachten Sie die Gruppe von Zuständen in der NFA, die sich in einer Schleife befinden. Führen Sie für jeden dieser Zustände Folgendes aus:q
Sei eine einfache Schleife, die . Sei die Zeichenkette, die der Schleife P 2 entspricht . Da die NFA keine Epsilon-Übergänge hat, ist s nicht leer. Wenden Sie dann das Unterprogramm auf NFA, Status q und Zeichenfolge s an . Wenn die Unterroutine uns sagt, dass jeder Pfad, der bei q in der NFA beginnt und bei einem Akzeptanzzustand endet, einem Präfix von s n für einige n entspricht, fahren Sie mit dem nächsten Zustand q fort . Andernfalls geben Sie aus, dass die Sprache der angegebenen NFA eine unendliche Präfix-freie Teilmenge enthält.P2qsP2sqsqsnnq
Wenn wir jeden Zustand q versuchen , der sich in einer Schleife befindet und der Algorithmus niemals ausgibt, dann wird ausgegeben, dass die Sprache der gegebenen NFA keine unendliche präfexfreie Teilmenge enthält.
Richtigkeit (erste Hälfte)
Angenommen, der obige Algorithmus behauptet, dass die Sprache der angegebenen NFA eine unendliche Präfix-freie Teilmenge enthält. Angenommen, dieser Ausgang wurde ausgewählt, während eine Schleife P2 und ein Zustand q berücksichtigt wurden . Wie zuvor ist s die Zeichenfolge, die P2 . Dann wissen wir gemäß der Unterroutine, dass nicht jeder Pfad, der bei q in der NFA beginnt und bei einem Akzeptanzzustand endet, einem Präfix von sn für einige n (da dies die einzige Ausgabe der Unterroutine ist, die zum Hauptalgorithmus führen würde Ausgabe bei diesem q ).
Sei P3 ein Pfad, dessen Existenz durch das Unterprogramm bestätigt wird: ein Pfad von q zu einem Akzeptanzzustand, so dass der entsprechende String t kein Präfix von sn für irgendein n .
Es sei P′2 aus m Kopien von P2 wobei m ausreichend groß ist, dass m|s|>|t|. Da P2 eine Schleife durch q , kann P′2 als Pfad von q nach q . Die Zeichenfolge, die P′2 entspricht, ist sm
Sei P1 ein Pfad vom Startzustand zu q (der existiert, da jeder Zustand von Anfang an erreichbar ist) und sei r die diesem Pfad entsprechende Zeichenfolge.
Dann ist der Pfad, der aus P1 , x Kopien von P′2 und P3 besteht, ein akzeptierender Berechnungspfad. Die diesem Pfad entsprechende Zeichenfolge ist r(sm)xt . Somit akzeptiert die NFA jede Zeichenfolge der Form r(sm)xt . Dies ist eine unendliche Menge von Zeichenfolgen, die von der NFA akzeptiert werden, und ich behaupte, dass diese Gruppe von Zeichenfolgen ohne Präfix ist. Angenommen, r(sm)xt ist ein Präfix von r(sm)yt mity>x . Mit anderen Worten istt ein Präfix von(sm)y−xt . Da(sm)y−x die Längem(y−x)|s|≥m|s|>|t|Dies impliziert, dasst ein Präfix von(sm)y−x=sm(y−x) . Aber wir wissen durch die Ausgabe des Unterprogramms, dasstkein Präfix vonsn für irgendeinn. Somit kannr(sm)xtkein Präfix vonr(sm)yt, und wie gewünscht ist der Satz von Zeichenketten präfixfrei.
Daher habe ich gezeigt, dass dies tatsächlich der Fall ist, wenn der Hauptalgorithmus ausgibt, dass die Sprache der angegebenen NFA eine unendliche Präfix-freie Teilmenge enthält.
Richtigkeit (zweite Hälfte)
Als nächstes werde ich die andere Hälfte zeigen: Wenn die Sprache der angegebenen NFA eine unendliche Präfix-freie Teilmenge enthält, gibt der Hauptalgorithmus diese Tatsache aus.
Angenommen, die Sprache der angegebenen NFA enthält eine unendliche Präfix-freie Teilmenge. Sei A die Menge von (akzeptierenden) Berechnungspfaden, die diesen Zeichenfolgen entsprechen. Beachten Sie, dass A eine unendliche Menge von akzeptierenden Berechnungspfaden ist, deren entsprechende Zeichenfolgen niemals Präfixe voneinander sind.
Angenommen, ein Status "schleift" in der NFA, wenn in der NFA eine Schleife durch diesen Status vorhanden ist, andernfalls "keine Schleife". Berücksichtigen Sie alle Pfade vom Startzustand bis zu einem Schleifenzustand, die nur Nicht-Schleifenzustände durchlaufen (mit Ausnahme des einen Schleifenzustands, in dem sie enden). Sei P die Menge dieser Pfade. Jeder Pfad p∈P kann keine Schleife haben, da dann die Zustände in dieser Schleife Schleifenzustände wären und p einen Schleifenzustand durchlaufen würde. Somit sind die Längen der Pfade in P oben durch die Anzahl der Zustände in der NFA begrenzt, und daher ist P endlich (wenn beispielsweise der Startzustand ein Schleifenzustand ist, ist der einzige solche Pfad der leere Pfad).
Wir können A in |P|+1 Teilmengen basierend darauf, wie diese Berechnungspfade in A beginnen. Insbesondere für die p∈P , lassen Ap die Menge aller Rechenweg in seine A , die mit Pfad beginnen p und lassen B die Menge aller anderen Pfade in seine A . Offensichtlich alle Ap s und B sind disjunkt und ihre Vereinigung ist der gesamte Satz A . Weiterhin Benthält nur Pfade, die niemals einen Schleifenzustand durchlaufen und daher niemals eine Schleife durchlaufen; somit ist B endlich. Wir können dann schließen, dass einige Ap unendlich sein müssen (andernfalls wäre A eine Vereinigung von endlich vielen endlichen Mengen).
Da Ap unendlich ist, gibt es unendlich viele Berechnungspfade, von denen keiner Zeichenfolgen Präfixe voneinander sind, die Pfade akzeptieren, die mit p . Sei q der Zustand, der am Ende des Pfades p . Wir können daraus schließen, dass es unendlich viele akzeptierende Pfade gibt. Nennen Sie diese Menge A′ , beginnend bei q alle Zeichenfolgen entsprechen, die keine Präfixe voneinander sind.
Während des Hauptalgorithmus führen wir das Unterprogramm für den Zustand q und einige Zeichenfolgen s . Dieses Unterprogramm sagt uns , ob jeder Annahme Pfad beginnend bei q entspricht einem String, der ein Präfix ist sn für einige n . Wenn dies der Fall wäre , wären alle unendlich vielen akzeptierenden Pfade in A′ Präfixe von sn für verschiedene n , was bedeuten würde, dass sie alle Präfixe voneinander sind. Dies ist nicht der Fall, daher schließen wir, dass, wenn der Hauptalgorithmus die Unterroutine im Zustand qDas Ergebnis ist das andere mögliche Ergebnis. Dies führt jedoch dazu, dass der Hauptalgorithmus ausgibt, dass die Sprache der NFA eine unendliche Präfix-freie Teilmenge enthält.
Damit ist der Beweis der Richtigkeit abgeschlossen.