Алгоритм полиномиального времени для вычисления размера DFA, описывающий пересечение двух регулярных выражений? - PullRequest
2 голосов
/ 22 февраля 2020

DFA, описывающий пересечение двух регулярных выражений, может быть экспоненциально большим по сравнению с DFA самих регулярных выражений. ( Вот хорошая Python библиотека для его вычисления.) Есть ли способ вычислить размер DFA для пересечения без использования экспоненциальных ресурсов?

1 Ответ

1 голос
/ 24 февраля 2020

Из Википедия:

Универсальность: LA = Σ *? […] Для регулярных выражений проблема универсальности уже NP-полна для одноэлементного алфавита.

Если я правильно понял, это говорит о том, что проблема определения того, порождает ли регулярное выражение все Известно, что строки являются NP-полными.

Теперь к вашей проблеме: рассмотрим случай, когда известно, что два входных регулярных выражения генерируют один и тот же регулярный язык (возможно, выражения идентичны). Тогда ваша проблема сводится к следующему: каков размер DFA для этого RE? Относительно просто сказать, генерирует ли RE хотя бы несколько строк (т. Е. Является ли язык пустым). Если язык не пустой, то минимальный DFA, соответствующий RE, имеет одно состояние тогда и только тогда, когда RE генерирует все строки.

Таким образом, если бы ваша задача имела общее решение за полиномиальное время, вы могли бы решить универсальность для регулярных выражений, что, по словам Википедии, невозможно.

(Если вы не спрашивая о минимальных DFA, но DFA, создаваемых с помощью определенной c методики минимизации, я думаю, вам придется указать метод минимизации).

...