Як перетворити NFA з перекриваючими циклами в регулярний вираз?


11

Якщо я правильно розумію, NFA має таку ж виразну силу, як і регулярні вирази. Часто зчитувати еквівалентні регулярні вирази з NFA легко: ви переводите цикли на зірки, з'єднання як альтернативу тощо. Але що робити в цьому випадку:

введіть тут опис зображення
[ джерело ]

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


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

Можливо, цей документ може вам допомогти: він чітко пояснює, як перетворити NFA в RE.
Vor

1
Чому важко? Ви спробували один із канонічних алгоритмів? Який найкращий анзац ви можете зробити?
Рафаель

3
Я редагував, щоб зробити питання (імхо) цікавим та корисним для цього сайту. Перегляньте історію редагування, щоб сформувати думку.
Рафаель

1
У мене є відповідь, яка перетворює ваш NFA в звичайний вираз, але я видалив його: відповідь Рафаеля дає вам метод, який потрібно зробити самостійно (він також дає посилання на приклад), так що ви можете отримати певну практику, якщо ви хочу. Якщо ви все ще хочете мого рішення, я скасую свою відповідь.
Олексій десять Бринк

Відповіді:


5

Замість того, щоб «читати», для цього слід скористатися одним із кількох канонічних методів. На сьогодні найприємніше, що я бачив, - це те, що виражає автомат як систему рівнянь (регулярних) мов, які можна вирішити. Це особливо приємно, оскільки, здається, дає більш стислі вирази, ніж інші методи.

Я написав цей документ, пояснюючи метод для студентів минулого літа. Це безпосередньо стосується конкретної лекції; Згадане посилання є типовим визначенням регулярних виразів. Докази леми Ардена (необхідний результат) містяться; один для правильності методу відсутній. Коли я дізнався про це на лекції, я не маю посилання, на жаль.

qi

Qi=qiaqjaQj{{ε}, qiF, else

Fqiaqjqiqja+

QiqiQ0q0

Застосування до заданого автомата залишається як вправа; повний приклад включений у вищезв'язаний документ .

Дивіться також тут, де я розмістив подібну відповідь.


1
Дивіться це посилальне запитання щодо інших загальних методів.
Рафаель

3

Якби був просто ланцюжок держав, що не мають циклу, ти би знав, що робити?

Якби була проста петля без цього перекриття розгалуження, ви б знали, що робити?

(Якщо відповідь "ні", спочатку подумайте про ці випадки.)

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

Майте на увазі , що це НЕ -deterministic автомат. Та, яку ви опублікували, буває детермінованою, але вона не повинна залишатися такою, коли ви її трансформуєте.

q2q1fq2gq3q4q2q5q4jq5gq3

q3,q4,q5q3q3(hjg)

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

Це не обов'язково найефективніший прийом або той, який генерує найпростіший регулярний вираз, але він простий.


3

Розділити q_1


І це відповідає на питання як?
Рафаель

1
Якщо ви перезаписуєте державний апарат таким чином, тепер тривіально читати еквівалентний регулярний вираз.
Юкка Суомела

1
Можливо, ви повинні включити це до тексту відповіді. Це завжди працює?
Рафаель

@Raphael: У цьому випадку це працює. :) Загальна ідея цього фокусу полягає в наступному: ми зробили цикли «належним чином вкладеними». Тобто у нас немає структури циклу, [(])але [()].
Jukka Suomela
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.