Dwadzieścia lat temu zbudowałem pakiet wyrażeń regularnych, który obejmował konwersje wyrażeń regularnych na maszynę skończoną (DFA) i obsługiwał wiele zamkniętych operacji wyrażeń regularnych (gwiazda Kleene, konkatenacja, operacje odwrotne, ustawianie itp.). Nie byłem pewien co do najgorszej wydajności mojego pakietu.
DFA ma taką samą moc ekspresyjną jak NDFA, ponieważ NDFA w stanie n można w trywialny sposób przekształcić w DFA o 2 ^ n stanach. Czy istnieją jednak dolne górne granice gwarancji dla takiej konwersji, które nie wymagają wykładniczej eksplozji w stanie?
Nie byłem w stanie wymyślić przykładów źle zachowujących się wyrażeń regularnych lub NDFA, ale nie zastanawiałem się długo. Zgaduję wyrażenie regularne, takie jak (((((e | A | B | C)) * (e | D | E | F)) * (e | G | H | I)) * (e | J | K | L | M)) *, który miesza wiele naprzemienności, a gwiazdy Kleene miałyby liniowy rozmiar NDFA, ale ekspansywny DFA.