Учитывая два набора строк над алфавитом Σ , можем ли мы вычислить наименьший детерминированный конечный автомат (DFA) M такой, что A ⊆ L ( M ) и L ( M ) ⊆ Σ ∗ ∖ B ?
Другими словами, представляет собой набор положительных примеров. Каждая строка в A должна быть принята DFA. B представляет собой набор отрицательных примеров. Никакая строка в B не должна быть принята DFA.
Есть ли способ решить эту проблему, возможно, с использованием методов минимизации DFA ? Я мог бы представить себе создание DFA-подобного автомата, который имеет три вида состояний: принимающие состояния, отклоняющие состояния и состояния "не заботятся" (любой вход, заканчивающийся в состоянии "не заботиться", может быть принят или отклонено). Но можем ли мы найти способ свести это к обычному DFA?
Вы можете думать об этом как о проблеме изучения DFA, используя положительные и отрицательные примеры.
Это вдохновлено Regex Golf NP-Complete? , который задает аналогичные вопросы для регулярных выражений вместо DFA.
Ответы:
DFA, как вы описываете, называется разделительным DFA . Существует некоторая литература по этой проблеме, когда и B являются обычными языками, такие как « Изучение минимального разделения DFA для проверки композиции», Ю-Фанг Чен, Азаде Фарзан, Эдмунд М. Кларк, Йих-Куен Цай, Боу-Яу ВанA В
Обратите внимание, что, как утверждает @reinierpost, без каких-либо ограничений на A и B проблема может стать неразрешимой.
источник
Нахождение минимального DFA, соответствующего данному набору строк, является NP-полным. Этот результат представлен в виде теоремы 1 в статье Англуина « О сложности минимального вывода регулярных множеств» . Очевидно, что ваша проблема также является NP-полной.
За множеством хороших ссылок и обсуждений по изучению обычных языков обращайтесь к посту блога CSTheory « Об изучении обычных языков» .
источник