Biorąc pod uwagę dwa dowolne wyrażenia regularne, czy istnieje „wydajny” algorytm do ustalenia, czy pasują one do tego samego zestawu ciągów?
Mówiąc bardziej ogólnie, czy możemy obliczyć rozmiar przecięcia dwóch zestawów dopasowań?
W jakich algorytmach można to zrobić i w jakiej klasie złożoności żyją?
Jeśli odrzucimy gwiazdę Kleene, czy to w ogóle zmieni obraz?
algorithms
regular-expressions
MathematicalOrchid
źródło
źródło
Odpowiedzi:
Hendrik Jan daje dobrą odpowiedź na klasę złożoności, ale nie sam algorytm.
Najprostszym algorytmem, który to znam, jest konwersja wyrażenia regularnego na DFA. Znane są techniki konwertowania wyrażeń regularnych na NFA, a NFA na DFA.
Gdy masz dwa DFA, testowanie równoważności jest wydajne i rozstrzygalne, ponieważ minimalna postać DFA jest unikalna aż do izomorfizmu.
Jednak zbudowanie tych DFA z NFA może zająć dużo czasu i wytworzyć niezwykle duże DFAS, wykładniczo duże w najgorszym przypadku.
źródło
Wiadomo, że równoważność wyrażeń regularnych jest kompletna z PSPACE, co jest raczej złe. W artykule „Złożoność problemów decyzyjnych dla prostych wyrażeń regularnych” wymieniono kilka podklas wyrażeń regularnych wraz z ich złożonością. ( link )
źródło