Ich interessiere mich für effiziente Algorithmen für die DFA-Schnittmenge für Sonderfälle. Wenn sich die zu schneidenden DFAs einer bestimmten Struktur gehorchen und / oder mit einem begrenzten Alphabet arbeiten. Gibt es eine Quelle, in der ich in solchen Fällen Algorithmen finden kann?
Um die Frage nicht zu weit zu fassen, ist die folgende Struktur von besonderem Interesse: Alle DFAs, die sich schneiden sollen, arbeiten im binären Alphabet (0 | 1). Sie können auch Symbole verwenden, die sich nicht darum kümmern. Darüber hinaus haben alle Zustände nur einen Übergang, mit Ausnahme von höchstens K speziellen Zuständen, die nur zwei Übergänge haben (und diese Übergänge sind immer 0 oder 1, aber es ist egal). K ist eine ganze Zahl, aus praktischen Gründen weniger als 10. Sie haben auch einen einzigen akzeptierenden Zustand. Darüber hinaus ist bekannt, dass der Schnittpunkt IMMER ein DFA in Form eines "Streifens" ist, dh keine Verzweigungen wie in der folgenden Abbildung:
EDIT: Vielleicht ist die Beschreibung der Einschränkung für die Eingabe-DFAs nicht sehr klar. Ich werde versuchen, es in diesem Absatz zu verbessern. Sie haben als Eingabe T DFAs. Jeder dieser DFAs arbeitet nur mit dem binären Alphabet. Jeder von ihnen hat höchstens N Zustände. Für jeden DFA ist jeder seiner Zustände einer der folgenden:
1) der akzeptierende Zustand (es ist nur einer und es gibt keinen Übergang von ihm zu einem anderen Zustand)
2) ein Zustand mit zwei Übergängen (0 und 1) zum gleichen Zielzustand (die Mehrheit der Zustände ist von dieser Art)
3) ein Zustand mit zwei Übergängen (0 und 1) zu verschiedenen Zielzuständen (höchstens K dieser Art)
Es wird garantiert, dass es nur einen akzeptierenden Zustand gibt und dass in jedem Eingangs-DFA höchstens K Zustände vom Typ (3) vorhanden sind. Es ist auch garantiert, dass der Schnittpunkt-DFA aller Eingangs-DFAs ein "Streifen" (wie oben beschrieben) mit einer Größe von weniger als N ist .
EDIT2: Einige zusätzliche Einschränkungen, wie von DW in den Kommentaren angefordert:
- Die Eingangs-DFAs sind DAGs.
- Die Eingabe-DFAs werden gemäß der DW-Definition in den Kommentaren "geebnet". Sie können nämlich jedem Zustand unterschiedliche Ganzzahlen zuweisen, so dass jeder Übergang von einer Ganzzahl u zu einer Ganzzahl v wechselt , sodass u + 1 = v .
- Die Anzahl der akzeptierenden Zustände für jeden Eingangs-DFA überschreitet K nicht .
Irgendwelche Ideen? Vielen Dank.
a DFA in form of "strip", i.e., no branches
? Haben Sie einen bestimmten Grund zu der Annahme, dass man in Ihrem Fall besser als der Standardalgorithmus arbeiten kann?