Finden Sie den kleinsten DFA, der zwei Wörter ohne Brute-Force-Suche trennt?

23

Mit zwei Zeichenfolgen x und y möchte ich einen DFA mit einer Mindestgröße erstellen, der x akzeptiert und y ablehnt. Eine Möglichkeit hierfür ist die Brute-Force-Suche. Sie zählen die DFAs beginnend mit den kleinsten auf. Sie probieren jeden DFA aus, bis Sie einen finden, der x akzeptiert und y ablehnt.

Ich möchte wissen, ob es eine andere bekannte Möglichkeit gibt, einen DFA mit einer Mindestgröße zu finden oder zu erstellen, der x akzeptiert und y ablehnt. Mit anderen Worten, können wir die Brute-Force-Suche schlagen?

Mehr Details:

(1) Ich möchte wirklich, dass ein Algorithmus eine minimale DFA-Größe findet, keine nahezu minimale DFA-Größe.

(2) Ich möchte nicht nur wissen, wie groß oder klein der minimale DFA ist.

(3) Hier konzentriere ich mich nur auf den Fall, in dem Sie zwei Zeichenfolgen x und y haben.


Bearbeiten :

Zusätzliche Informationen für den interessierten Leser:

Angenommen, und y sind binäre Zeichenfolgen mit einer Länge von höchstens n . Es ist bekannt, dass es einen DFA gibt, der x akzeptiert und y mit höchstens ablehntxynxy Staaten. Beachten Sie, dass es ungefährn √ gibtn DFAs mit einem binären Alphabet und höchstensnn Staaten. Daher würde der Brute-Force-Ansatz nicht erfordern, dass wir mehr alsn aufzählenn DFAs. Daraus folgt, dass der Brute-Force-Ansatz nicht viel mehr alsn dauern kannnnnn zeit.

Folien, die ich hilfreich fand: https://cs.uwaterloo.ca/~shallit/Talks/sep2.pdf

Michael Wehar
quelle
2
@ AndrásSalamon Ist es noch NP-vollständig, wenn die zu unterscheidenden Sätze jeweils nur aus einer Zeichenfolge bestehen? Ich finde, das sollte einigermaßen nachvollziehbar sein.
mhum
6
@mhum das Problem, dass es viele verschiedene reguläre Sprachen gibt, die die beiden Zeichenfolgen trennen - DFA-Minimierung findet den besten Automaten für eine dieser Sprachen, vergleicht ihn jedoch nicht mit Automaten für die anderen trennenden Sprachen.
David Eppstein
4
Wenn und y sind verschiedene Längen, mit der größeren Länge n , es ist leicht, schnell eine DFA zu finden , mit O ( log n ) heißt es, dass trennt sie: nur einen Kreis der Länge verwenden p , wobei p nicht divide tut | x | - | y | . Finden Sie p, indem Sie 2 , 3 , 5 , ... versuchen , bis Sie das passende p finden . Wenn x und y gleich lang sind, dann ist das OxynO(logn)pp|x||y|p2,3,5,pxyKonstruktion von Robson in einer Arbeit von 1996 ergibt eine einfache Maschine, die durch eine Suche nach GrößeO(n) gefunden werden kann. Weder Konstruktion ist garantiert die kleinste DFA. O(n)O(n)
Jeffrey Shallit
3
Shallits Notizen, die oben verlinkt sind, enthalten die nützliche Beobachtung, dass der schlimmste Fall für das Trennungsproblem der Fall ist, wenn das Alphabet binär ist: Es ist immer möglich, größere Alphabete in zwei Teilmengen zu unterteilen, die die beiden Eingabewörter noch unterscheiden, und nach einem binären Automaten zu suchen, der behandelt Buchstaben in einer Teilmenge als Nullen und Buchstaben in der anderen Teilmenge als Einsen. Für die Suche nach dem Mindesttrennungsautomaten scheint dies jedoch nicht hilfreich zu sein, da Sie möglicherweise die zusätzlichen Informationen aus dem Originalalphabet verwenden können, um bessere Ergebnisse zu erzielen als bei einer Zuordnung zu einem Binäralphabet.
David Eppstein
3
Ein Sonderfall dieser anderen neueren Frage, bei der die Größe von In-Set und Out-Set gleich 1 ist. Minimale endliche Automaten, die in-words und out-words angegeben werden . Diese Antwort listet einige Lernliteratur einschließlich einiger Heuristiken.
vzn

Antworten:

9

Wenn ich dies in der Praxis tun müsste, würde ich einen SAT-Löser verwenden.

Die Frage, ob es einen DFA mit Zuständen gibt, der x akzeptiert und y ablehnt, kann leicht als SAT-Instanz ausgedrückt werden. Zum Beispiel besteht eine Möglichkeit darin, 2 k 2 boolesche Variablen zu haben: z s , b , t ist wahr, wenn der DFA beim Eingangsbit b vom Zustand s zum Zustand t übergeht . Fügen Sie dann einige Klauseln hinzu, um zu erzwingen, dass dies ein DFA ist, und einige Variablen und Klauseln, um zu erzwingen, dass es x akzeptiert und y ablehnt .kxy2k2zs,b,tstbxy

Verwenden Sie nun binäre Suche auf die kleinste zu finden k , so dass ein DFA dieser Art existiert. Basierend auf dem, was ich in Artikeln über verwandte Probleme gelesen habe, würde ich erwarten, dass dies in der Praxis einigermaßen effektiv ist.kk


Andere Kodierungen davon als SAT sind möglich. Beispielsweise können wir eine Ablaufverfolgungscodierung verwenden:

  • Wenn Länge m hat , können Sie m lg k boolesche Variablen hinzufügen : Sei s 0 , s 1 , ... , s m die Folge von Zuständen, die am Eingang x durchlaufen werden , und repräsentieren jedes s i mit lg k booleschen Variablen.xmmlgks0,s1,,smxsilgk

  • Nun haben Sie für jedes so dass x i = x j ist , die Bedingung, dass s i - 1 = s j - 1 isti,jxi=xjsi1=sj1si=sj .

  • Als nächstes erweitern Sie dies, um zu behandeln : sei t 0 , ... , t n die Folge von Zuständen, die an der Eingabe y durchlaufen werden , und repräsentieren jedes t j unter Verwendung von lg k booleschen Variablen. Fügen Sie für jedes i , j, so dass y i = y j ist, die Bedingung hinzu, dass t i - 1 = t j - 1 istyt0,,tnytjlgki,jyi=yj .ti1=tj1ti=tj

  • In ähnlicher Weise füge für jedes so dass x i = y j ist, die Bedingung hinzu, dass s i - 1 = t j - 1 isti,jxi=yj .si1=tj1si=tj

  • Beide Messkurven müssen vom selben Startpunkt ausgehen. Fügen Sie daher die Anforderung hinzu, dass (WLOG kann s 0 = t 0 = 0 sein ).s0=t0s0=t0=0

  • k0si<k0tj<ki,j

  • xysmtn

Alle diese Anforderungen können als SAT-Klauseln kodiert werden.

kk

DW
quelle
3
Beachten Sie, dass dies der Brute-Force-Suche überlegen ist, wenn das Problem bestimmte Symmetrien aufweist und diese vom Löser erkannt werden. Derzeit ist es jedoch möglicherweise schwierig, diese zu identifizieren / zu isolieren (entweder für Menschen oder Maschinen). Es gibt auch einige neuere / verwandte "Technologien" für Erfüllbarkeitsmodulo-Theorien und Antwortsatz-Programmierung, von denen einige "eingebaute" Graph-Prädikate haben oder deren Definitionen unterstützen können.
vzn