Vor 20 Jahren habe ich ein Paket für reguläre Ausdrücke erstellt, das Konvertierungen von regulären Ausdrücken in eine Finite-State-Maschine (DFA) enthielt, und eine Vielzahl von geschlossenen Operationen für reguläre Ausdrücke (Kleene-Stern, Verkettung, Umkehrung, Mengenoperationen usw.) unterstützt. Ich war mir nicht sicher über die schlechteste Leistung meines Pakets.
Ein DFA hat die gleiche Ausdruckskraft wie ein NDFA, da ein NDFA mit n Zuständen trivial in einen DFA mit 2 ^ n Zuständen umgewandelt werden kann. Gibt es jedoch Garantien für eine solche Konvertierung, die keine exponentielle Explosion im Zustand erfordern?
Ich konnte keine Beispiele für sich schlecht verhaltende reguläre Ausdrücke oder NDFAs finden, aber ich habe nicht viel Zeit darauf verwendet, darüber nachzudenken. Ich vermute einen regulären Ausdruck wie ((((e | A | B | C) * (e | D | E | F)) * (e | G | H | I)) * (e | J | K | L | M)) *, das viele Wechsel und Kleene-Sterne mischt, hätte einen linearen NDFA, aber einen expansiven DFA.