Как видно в этой недавней полосе XKCD и в этом недавнем сообщении в блогеПо словам Питера Норвига (история Слэшдота, в которой рассказывается о последнем), «регулярное выражение в гольфе» (которое лучше назвать проблемой разделения регулярных выражений) - это задача определения кратчайшего из возможных регулярных выражений, которое принимает каждое слово в множестве А, а слово в сет Б. Норвиг включает в себя алгоритм генерации достаточно короткого кандидата, и он отмечает, что его подход предполагает решение NP-полной задачи «Обложка множества», но он также осторожно указывает, что его подход не учитывает все возможные регулярные выражения, и, конечно, его алгоритм не обязательно является единственным, поэтому его решения не гарантируют оптимальности, а также возможно, что какой-то другой алгоритм с полиномиальным временем может найти эквивалентные или лучшие решения.
Для конкретности и во избежание необходимости решать вопрос оптимизации, я думаю, наиболее естественной формулировкой разделения регулярных выражений будет:
Для двух (конечных) наборов строк и B в некотором алфавите Σ существует ли регулярное выражение длины ≤ k, которое принимает каждую строку в A и отклоняет каждую строку в B ?
Что-нибудь известно о сложности этой конкретной проблемы разделения? (Обратите внимание, что, поскольку я указал и B как конечные наборы строк, естественным понятием размера для задачи является общая длина всех строк в A и B ; это перекрывает любой вклад от k ). Мне кажется весьма вероятным, что он является NP-завершенным (и на самом деле, я бы ожидал, что сокращение будет связано с какой-то проблемой прикрытия), но некоторые поиски не нашли ничего особенно полезного.