Имеется ли два произвольных регулярных выражения, существует ли «эффективный» алгоритм для определения того, соответствуют ли они одному и тому же набору строк?
В более общем смысле, можем ли мы вычислить размер пересечения двух наборов совпадений?
Какие алгоритмы существуют для этого и в каком классе сложности они живут?
Если мы запретим звезду Клини, это вообще изменит картину?
algorithms
regular-expressions
MathematicalOrchid
источник
источник
Ответы:
Хендрик Ян дает хороший ответ для класса сложности, но не сам алгоритм.
Самый простой алгоритм, который мне известен, это преобразовать регулярное выражение в DFA. Существуют известные методы преобразования регулярного выражения в NFA и NFA в DFA.
Если у вас есть два DFA, тестирование на эквивалентность является эффективным и решаемым, поскольку минимальная форма DFA уникальна с точностью до изоморфизма.
Однако построение этих DFA из NFA может занять много времени и привести к созданию очень большого DFAS, экспоненциально большого в худшем случае.
источник
Известно, что эквивалентность регулярных выражений полна PSPACE, что довольно плохо. В статье «Сложность решения задач для простых регулярных выражений» перечислены несколько подклассов регулярных выражений с соответствующими им сложностями. ( ссылка )
источник