Первый трюк заключается в том, чтобы рассматривать таблицу умножения как таблицу переходов автомата где каждое состояние представляет букву в таблице умножения, но пока не беспокоится о принятии. Так что буквы слева и в теле таблицы на самом деле являются состояниями - было бы точнее записать их как q a , q b , q c , но я не буду. Буквы в верхней части являются входными данными.AQa, дб, дс
Затем создайте автомат (« T » для транспонирования) для обратного умножения путем транспонирования A :ATTA
ATaбсaaaсбсaбсбсa
Таким образом, переводит вас в состояние c , и , как вы заметили, A T ( c b a ) переходит в состояние a of A T.A ( a b c )сAT( с б а )aAT
Тем не менее, предполагает, что вы идете справа налево, а мы все еще хотим идти слева направо. Таким образом, второй трюк состоит в том, чтобы перевернуть автомат (а не умножение, которое бы просто вернуло нас, если бы мы начали), путем обращения всех стрелок в обратном направлении , что приводит к недетерминированному автомату A T R, указанному в таблице переходов ниже, с подмножества, обозначенные каскадными буквами, чтобы курица не царапалась, поэтому a c действительно { a , c } . (надеюсь, я все понял - кажется, работает).ATATрс{ а , с }
ATрaбса бб сса б в∅aа б∅са бса б ва б в∅ббсaб сса ба б в∅ссaбса б вб са б в∅
Вы можете интерпретировать это как недетерминированный автомат только с тремя строками над линией или с определенной версией со всеми 8 строками.
Наконец, машиной для решения проблемы является автомат перекрестных произведений исходных и A T R , то есть A × A T R для выполнения пересечения двух автоматов (нам больше не нужен A T ) , × Т Р имеет состояния , которые представляют собой пары , такие как ⟨ с , в с ⟩ . Функция перехода запускает A и A T R независимо. Один начальное состояние ⟨ 1 , 1 ⟩AATрA × ATрATA × ATр⟨ , С ⟩AATр⟨ 1 , 1 ⟩переходит в при входе а , в ⟨ б , б ⟩ при входе б и т.д. ⟨ , ⟩a⟨ Б , б ⟩б
Принимая состояния в неопределенных версиях являются и т.д. В детерминированной версии, принимая состояния пары , в которых первый компонент ∈ второго компонента набора, например, ⟨ в , ⟩ или ⟨ б , б с ⟩ .⟨ , ⟩∈⟨ , ⟩⟨ Б , б с ⟩
дополненное и определенное, как показано, имеет 25 = 3 ⋅ 8 + 1 состояний, так что извините, если я не напишу это подробно. Но недетерминированная версия имеет только 10 = 3 ⋅ 3 + 1 состояний.A × ATр25 = 3 ⋅ 8 + 110 = 3 ⋅ 3 + 1
Если L регулярный язык, то L R , язык, состоящий изреверсавсех слов в L , также является регулярным. Примите это как упражнение.( ∗ ) L Lр L
Как это помогает нам решить проблему? Пусть - языки, состоящие из всех строк, которые оцениваются как a , b , c при оценке слева направо. Интересующий вас язык ( L a ∩ L R a ) ∪ ( L b ∩ L R b ) ∪ ( L c ∩ L R c ) . Это показывает, что если вы знаете, как доказать (La, Лб, Лс а , б , в
На самом деле, если вы используете идею доказательства , то, вероятно, вы можете просто пойти дальше и построить автомат. Итак, давайте рассмотрим это. В частности, давайте попробуем построить NFA для L R a , языка всех строк, которые оцениваются как a при оценке справа налево.( ∗ ) Lрa a
Этот намек должен дать вам достаточно, чтобы подумать и, надеюсь, решить проблему.
источник
Милый.
Теперь давайте создадим автомат, который вычисляет произведение справа налево. Этот будет недетерминированным. Как мы это делаем? Просто ... Чтобы пойти в другом направлении, просто поменяйте местами все : стрелки и направление продукта.
источник
Кажется, что ваша главная проблема заключается в использовании недетерминизма, поэтому позвольте мне остановиться на этом подробнее.
Как видите, NFA может угадывать и проверять все возможные вычисления снизу вверх . Поскольку принятый язык определяется как набор строк, который принимается хотя бы одним прогоном , все неприемлемые прогоны на входе игнорируются; НФА "всегда угадывает правильно".
Теперь NFA легко запомнить свой первый выбор до конца. Если он принимает, он может сравнить запомненный символ с lr-произведением (детерминистически), полученным параллельно (то, как пересечение языка относится к NFA, наверняка описано в Ullman / Hopcroft и любом другом базовом учебнике).
источник