Für eine effiziente Heuristik würde ich vorschlagen, in der CAD-Literatur zum Problem der Zustandscodierung nachzuschauen (Zuweisen von binären Bezeichnern zu Zuständen eines DFA, um den logischen Aufwand für die Zustandsübergangsfunktion zu minimieren). Devadas und Newton, "Zerlegung und Faktorisierung der sequentiellen Endlichkeit State Machines, IEEE TCAD , 8 (11): 1206-1217, 1989, weist darauf hin, dass es eine enge Beziehung zwischen der Zustandscodierung und der Zerlegung der Zustandsmaschine gibt.
Wenn Sie für einen DFA mit Zuständen jedem Zustand eine eindeutige M- Bit-Zustandskennung zuweisen ( lg 2 N < M ≤ N ), haben Sie den DFA im Wesentlichen in ein Netzwerk von M interagierenden Zwei-Zustands-Maschinen zerlegt . Entsprechend: Sie haben eine Menge S mit M Elementen definiert und jedem Zustand in Ihrem ursprünglichen DFA eine eindeutige Teilmenge von S zugewiesen . Dies ist auch das, was der Rabin-Scott-Powerset-Konstruktionsalgorithmus tut. Durch eine Zustandscodierung auf dem DFA versuchen wir also, die Menge, von der der Powerset-Konstruktionsalgorithmus ausgegangen ist, zurückzuentwickeln.NMlg2N<M≤NMSMS
Beim herkömmlichen Problem der Zustandscodierung sind alle Codierungen zulässig, und es gibt eine objektive Funktion (in Bezug auf den Logikaufwand in der Zustandsübergangsfunktion), die Sie minimieren möchten. Um eine NFA zu generieren, müssen Sie eine eingeschränkte Version des folgenden Problems lösen, wobei:
Eine Codierung von Bitkennungen in die DFA-Zustände stellt eine NFA dar, wenn für jedes Symbol im Alphabet die Übergangsfunktion für jedes Bit eine einfache Disjunktion von Bits ist. (Keine Konjunktion oder Negation ist erlaubt.)M
Sie können also alle Bit-Codierungen für alle lg 2 N < M ≤ N auflisten und prüfen, ob jede die Bedingung erfüllt. (Beachten Sie, dass für M = N die triviale "One-Hot" -Codierung immer die Einschränkungen erfüllt und Ihnen den DFA gibt.) Die Aufzählung ist jedoch lächerlich groß (Di Michelis Lehrbuch gibt sie als etwa 2 M an !Mlg2N<M≤NM=N.) Der Grund, warum ich die CAD-Literatur vorschlage, ist, dass es Techniken gibt, mit denen diese Suche implizit durchgeführt werden kann, anstatt sie aufzuzählen (z. B. mithilfe von BDDs, sieheLin, Touati und Newton, "Es ist mir egal, die Minimierung von mehrstufigen Sequenzen zu minimieren." Logic Networks,Int'l Conf Comp-Aided DsgnICCAD-90: 414-417, 1990.2M!(2M−N)!M!
Beispiel
Nehmen Sie den folgenden DFA (mit einer Statuscodierung, die ich durch Betrug abgeleitet habe (ich habe den DFA aus einer NFA mit Rabin-Scott generiert, und die Codierung repräsentiert die von Rabin-Scott ausgewählten Teilmengen).
Wenn wir die Bits in der Zustandszuweisung ABCD aufrufen, ist die Übergangsfunktion A = A, B = A, C = B, D = C, wenn das Eingangssymbol 1 ist. Wenn das Eingabesymbol 0 ist, ist die Übergangsfunktion A = A, C = B, D = C. Dies ist eine rein disjunktive Übergangsfunktion ohne Konjunktion oder Negation, daher gibt uns diese Zustandscodierung eine NFA. Die Zustände in der NFA entsprechen eins zu eins den Bits in der Codierung, und die Übergangsfunktion ist wie folgt:
Formulierung als boolesches Erfüllbarkeitsproblem
Die obige informelle Beschreibung führt direkt zu einer Codierung als boolesches Erfüllbarkeitsproblem. Es gibt eine Reihe von Variablen, die die Übergänge in der NFA beschreiben, und eine Reihe von Variablen für die DFA-Statuscodierung, die von Rabin-Scott für die ausgewählte NFA abgeleitet würden. Die Übergänge des spezifischen DFA, den Sie zerlegen möchten, werden verwendet, um Einschränkungen für die NFA-Übergänge festzulegen.
NSMlg2N<M≤Nysftysftf t sSM2=32 yy0AA,y1AAy1ABy1DA
xdnndN=8M=4xkxkAxkCxkDxkB ist falsch.
i<j{A,B,⋯,D}
(xiA≠xjA)+(xiB≠xjB)+⋯+(xiD≠xjD).
ijskjljlko(SN2)
xjAxjBxjD===ysAAxiA+ysBAxiB+⋯+ysDAxiDysABxiA+ysBBxiB+⋯+ysDBxiD⋯ysADxiA+ysBDxiB+⋯+ysDDxiD.
x0A+x0B+⋯+x0DfnxiAfA+xiBfB+⋯+xiDfDi¬(xjAfA+xjBfB+⋯+xjDfD)j