Il y a vingt ans, j'ai construit un package d'expressions régulières qui comprenait des conversions d'expressions régulières vers une machine à états finis (DFA) et pris en charge une multitude d'opérations d'expressions régulières fermées (Kleene star, concatenation, reverse, set operations, etc.). Je n'étais pas sûr des performances les plus défavorables de mon colis.
Un DFA a le même pouvoir expressif qu'un NDFA, car un NDFA à n états peut être converti trivialement en un DFA ayant 2 ^ n états. Cependant, existe-t-il des garanties de limite supérieure inférieures pour une telle conversion qui ne nécessitent pas une explosion exponentielle en état?
Je n'ai pas été en mesure de trouver des exemples d'expressions régulières ou NDFA se comportant mal, mais je n'ai pas passé beaucoup de temps à y penser. Je devine une expression régulière comme (((((e | A | B | C) * (e | D | E | F)) * (e | G | H | I)) * (e | J | K | L | M)) * qui mélange beaucoup d'alternances et les étoiles Kleene auraient un NDFA de taille linéaire mais un DFA expansif.