Problemstellung :
Sei ein (möglicherweise nicht deterministischer) Pushdown-Automat und sei sein Eingabealphabet. Gibt es ein Wort st , das von akzeptiert wird ?
Ist dieses Problem NP-vollständig? Wurde es untersucht? Gibt es einen Algorithmus, mit dem ein solches Wort gefunden werden kann?
Antworten:
Berechnen Sie den Schnittpunkt Ihrer CFG-Sprache mit der regulären Sprache (dies bedeutet, die Anzahl der Zustände mit k zu multiplizieren und einen "Sackgasse" -Zustand hinzuzufügen). Überprüfen Sie nun, ob das Ergebnis leer ist: Konvertieren Sie es in eine Grammatik (ich denke, das Ergebnis wird eine Polynomgröße haben) und "backtrack" von Epsilon-Produktionen.∑ki = 0EINk k
Bearbeiten: Kaveh erwähnte, dass dies in Polynom ist. Wenn also k als Eingabe angegeben wird, ist der Algorithmus in | exponentiell k | . Kaveh fand jedoch einen Weg, dies zu beheben. Konvertieren Sie den Originalautomaten in ein CFG und ersetzen Sie alle Terminals durch ein festes Terminal. Verwenden Sie nun einen iterativen Algorithmus, um die minimale Größe eines von jedem Nicht-Terminal erzeugten Wortes wie folgt zu ermitteln.k k | k |
quelle
Ändern Sie alle Alphabetzeichen in ein bestimmtes Zeichen. Jetzt haben Sie PDA über ein einzelnes Zeichen definiert. Seine Sprache ist eine kontextfreie Grammatik. Die kontextfreie Grammatik über ein einzelnes Zeichen ist jedoch regelmäßig. Konvertieren Sie also die CFG in eine reguläre Sprache und prüfen Sie, ob sie ein Wort der Länge k enthält.
Nun, all diese Konvertierungen erfordern tendenziell exponentielle Zeit, aber es scheint mir unwahrscheinlich, dass das Problem NP-vollständig ist. Vor allem, wenn Sie die Polynomzeit in zulassen .k
Ich könnte mich irren und entschuldige mich für meine erste schnelle Antwort ...
Übrigens folgt die Tatsache, dass eine CFG über einen einzelnen Buchstaben regelmäßig ist, aus dem Satz von Parikh. Obwohl ein direkter Beweis nicht zu schwer ist. Weitere Informationen zum Satz von Parikh finden Sie unter dem Link - es ist ein schönes Ergebnis ... http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf
quelle
Eine wahrscheinlich suboptimale Methode: Führen Sie den Djikstra-Algorithmus aus. Vergleichen Sie dann für jeden Endzustand die Abstände mit . Wenn irgendwelche ≤ k sind , akzeptiere. Ablehnen.k ≤k EDIT: Das oben genannte funktioniert nur für NFAs! Das tut mir leid.
quelle