Минимизация NFA без определения - PullRequest
12 голосов
/ 31 июля 2010

Хорошо известно, как перейти от NFA для обычного языка к минимальному DFA.Тем не менее, DFA может иметь экспоненциально большее число состояний.

Мне нужен способ уменьшить NFA, снова давая NFA, но с меньшим числом состояний.Поэтому мне не нужно, чтобы результат был детерминированным, но я бы хотел, чтобы он был как можно меньшим при сохранении признанного языка (возможно, не совсем оптимального, но чем меньше, тем лучше).

Чтолучшие алгоритмы для этой проблемы?Или, может быть, не «лучший», но, по крайней мере, «самый простой в реализации с неисчерпаемой эффективностью»?Или у проблемы есть известное имя, чтобы я сам мог найти хорошие источники информации?

Ответы [ 2 ]

9 голосов
/ 31 июля 2010

Я считаю, что проблема также известна как минимизация NFA.Я считаю, что в целом это NP-сложный процесс.

Одним из плодотворных подходов может быть минимизация бисимуляции [Paige, Tarjan 1987] и последующих производных.заметки о возможности решения проблемы, а также ссылки на некоторые подходы с указанием их относительных достоинств.

2 голосов
/ 25 августа 2013

Здесь есть реализация алгоритма Камеда-Вейнера для минимизации NFA: https://github.com/coder0xff/parlex/blob/master/IDE/Nfa.cs

...