Я генерирую случайные DFA для проверки алгоритма сокращения DFA на них.
Алгоритм, который я сейчас использую, таков: для каждого состояния , для каждого символа в алфавите c добавьте δ ( q , c ) к некоторому случайному состоянию. Каждое состояние имеет одинаковую вероятность стать конечным состоянием.
Это хороший метод создания объективных DFA? Кроме того, этот алгоритм не генерирует обрезанный DFA (DFA без устаревших состояний), поэтому мне интересно, есть ли лучший способ генерации случайных DFA, который каким-то образом может гарантировать, что это обрезка?
Ответы:
Проверьте [1] и обсуждение в Разделе 4, Генерация случайных автоматов. В статье рассматриваются различные алгоритмы минимизации DFA. Используется равномерный генератор случайных чисел, который создает канонические строковые представления полных DFA с состояниями и k символами. Они также обсуждают другие методы.n k
[1] Алмейда М., Морейра Н. и Рейс Р. (2007). О производительности алгоритмов минимизации автоматов. Логика и теория алгоритмов, 3.
источник
Вы должны взглянуть на домашнюю страницу Сирила Ника . В частности, следующие вопросы имеют отношение к вашему вопросу:
F. Bassino, J. David и C. Nicaud, Перечисление и случайная генерация возможно неполных детерминированных автоматов, Чистая математика и приложения 19 (2-3) (2009) 1-16.
Ф. Бассино и С. Никао. Перечисление и случайная генерация доступных автоматов. Теор. Комп. Совет Безопасности ООН , 381 (2007) 86-104.
источник
Существуют алгоритмы для случайной генерации DFA с точностью до перестановки http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz .
Но в вышеупомянутой статье также упоминается, что почти все DFA уже минимальны. Неминимальные DFA - это простые числа ... их всего несколько. И если вы используете этот алгоритм для тестирования алгоритма минимизации, это будет похоже на тестирование алгоритма на простом числе с помощью простого генератора случайных чисел. Чтобы иметь больше неминимальных DFA, вы можете изменить алгоритм, добавив состояние приемника, и перенаправить значительный процент переходов в это состояние приемника.
Но, с моей точки зрения, если вы хотите проверить скорость своей реализации, сравните ее с тем, для чего вы хотите ее использовать: со случайными наборами слов или случайным REGEX, создайте NFA или DFA, а затем минимизируйте получающийся DFA ,
источник
источник