Які алгоритми існують для побудови DFA, який розпізнає мову, описану заданим регулярним виразом?


11

Усі мої підручники використовують один і той же алгоритм для створення DFA, заданого регулярним виразом: Спочатку зробіть NFA, який розпізнає мову регулярного виразів, потім, використовуючи побудову підмножини (він же "powerset"), перетворять NFA в еквівалентну DFA ( необов'язково мінімізуючи DFA). Я також одного разу почув, як професор натякає на існування інших алгоритмів. Хтось знає кого-небудь? Можливо, той, що прямує від регулярного вираження до DFA без проміжного NFA?


Ласкаво просимо до cstheory, веб-сайту Q&A для питань рівня досліджень в теоретичній інформатиці (TCS). Ваше запитання не є питанням рівня дослідницької роботи в TCS. Будь ласка, перегляньте поширені запитання для отримання додаткової інформації про те, що мається на увазі під цим поняттям. Ваше запитання може підходити до інформатики, яка має ширшу сферу застосування.
Каве

1
чому ви завжди використовуєте цей коментар до шаблону? Мабуть, є щонайменше 5, хто не згоден з вами. Я б запропонував вам дати таким питанням шанс.
AJed

@AJed, я не завжди використовую цей коментар. Я використовую його, коли питання мені здається поза темою, але може бути придатним для інформатики . Підвищення голосів не означає, що питання на тему, і це, здається, не є питанням для мене на рівні досліджень, тому я вважаю, що коментар є відповідним. (Те, що хтось може написати відповідь дослідницького рівня на запитання, не робить питання дослідницьким рівнем.) Ps: Я думаю, що це обговорення більше підходить для Теоретичної метаметики .
Каве

Відповіді:


13

Існують різні алгоритми для перетворення регулярних виразів у кінцеві автомати. Ви можете переходити безпосередньо від регулярних виразів до DFA, не будуючи спочатку жодного іншого автомата, неявно виконуючи побудову підмножини під час генерації автомата. Інший варіант прямого отримання детермінованих автоматів - це використання методу похідних.

Перевірка, чи регулярний вираз представляє мову, що містить усі рядки, є повною проблемою PSPACE (див. Цю відповідь для посилання). Перевірка, чи приймає DFA, що мова може бути виконана в поліноміальний час, тому, якщо ви переходите безпосередньо від регулярного виразу до DFA, десь буде вибух.

Моє розуміння літератури полягає в тому, що ми можемо вибрати переклади, які дозволять нам локалізувати вибух. Тобто, існують різні способи переходу від регулярного виразу до кінцевого автомата, і переважні методи, лінійні чи поліноми. Зазвичай експоненціальні витрати підштовхуються до визначення автоматів.

Було проведено багато роботи з визначення під-родин регулярних виразів, з яких ми можемо ефективно генерувати DFA. Цей напрямок роботи залежить від перекладу, який ви використовуєте. Значить, ви фіксуєте відображення від регулярних виразів до NFA і намагаєтесь охарактеризувати регулярні вирази, які відображають у DFA.

Стандартна побудова автоматів з регулярних виразів не є кращою конструкцією в таких роботах. Конструкції вибору створюють автомати, які дуже нагадують структуру регулярного виразу. Ці конструкції використовують поняття похідної регулярного виразу.

Похідні від регулярних виразів , Й. А. Бжозовський. 1964 рік.

сrаrа

Часткові похідні правильних виразів і кінцевих конструкцій автоматів , В. Антиміров. 1995 рік.

Якщо ви вважаєте стан автомата як представлення всіх рядків, прийнятих з цього стану, (часткові) похідні дозволяють вам трактувати регулярні вирази як стани . На відміну від стандартної конструкції підручника, яка інтуїтивно трактує регулярні вирази як автомати, а не стани.

Від регулярних виразів до детермінованих автоматів , Г. Беррі та Р. Сетхі, 1986.

Відповідність між регулярними виразами та станами автомата та детермінізмом чітко обговорюється Беррі та Сетхі, які поєднують поняття похідних Бжозовського з ідеєю розрізнити виникнення одного і того ж символу, щоб надати синтаксис перекладу регулярних виразів у кінцеві автомати.

Однозначні регулярні мови , А. Брюггман-Кляйн та Дерик Вуд, 1998.

Ця стаття спирається на попередню роботу Брюггемана-Кляйна та вивчає випадки, в яких можна використовувати похідні для генерування DFA в поліноміальний час. За цим документом йде великий обсяг роботи. Це було важливо з точки зору веб-технологій, оскільки регулярні вирази, якими можна ефективно маніпулювати (також відповідні DFA), були важливими для обробки SGML та XML.

Було проведено багато робіт з вивчення інших особливих випадків детермінованих регулярних виразів. Дуже недавній документ, що вивчає, коли деякі з цих проблем можна вирішити за лінійним часом, починається з 2012 року.

Детерміновані регулярні вирази у лінійному часі , Бенуа Гроз, Себастьян Манет, Славомір Ставорко. 2012 рік.


5
Ви вже згадували похідні у своїй відповіді, тому вам слід також додати JA Brzozowski: Похідні регулярних виразів, Journal of ACM 11 (4): 481–494 (1964), оскільки він дає прямий алгоритм перетворення регулярних виразів у DFA .
Neel Krishnaswami

3
Я обговорював з цього приводу. Але всі три статті вище безпосередньо спираються на цей результат, тому я вважав, що немає причин згадувати про це. Приклади Brueggeman-Klein та Wood також наповнені. Якщо я згадаю про Бжозовського, я вважаю, що слід також згадати і Антимірова. Я хотів уникнути опитування, але, можливо, мені просто слід пройти його. Що сказати?
Vijay D

5
Якщо у вас є час та енергія, я вважаю, що довгі відповіді, схожі на опитування, тут дуже доречні.
Девід Еппштейн

1
@VijayD: так, я згоден з Девідом. Короткі відповіді чудово, але якщо у вас є енергія, приємно дати вичерпну відповідь.
Ніл Крішнасвамі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.