Автоматы Pushdown для Палиндронов

Итак, я обнаружил, что этот КПК принимает палиндромы на языке {0,1}*.

Палиндрон КПК

Однако я не понимаю, как он мог принять «1» или «0».

В B он может прочитать 1 или 0 и поместить тот же символ в стек, а затем перейти к C. Однако, когда он находится в C, ему некуда идти, так как для достижения $ в стеке необходимо прочитать другой символ.

Может кто-нибудь объяснить, как это работает?

Я думаю, что для того, чтобы принять один символ, нам понадобится переход от B к D => 1,$->ε | 0,$->ε.

Буду ли я прав?

Спасибо :)


person mickzer    schedule 24.11.2015    source источник


Ответы (1)


Ты прав. Этот КПК не примет 0 или 1 (или вообще любой палиндром нечетной длины — понимаете, почему?)

Чтобы исправить это, я бы рекомендовал добавить эти переходы от B к C:

0,

1,

Эти переходы, по сути, позволяют вам потреблять персонажа «бесплатно». Если вы выберете средний символ, а строка будет палиндромом, отлично! Тогда ты примешь. Если вы выберете неправильный символ или строка не является палиндромом, вы никогда не пройдете через состояния C и D без того, чтобы автомат не умер.

person templatetypedef    schedule 24.11.2015
comment
Я думаю, что предложение, которое я добавил в свое редактирование, эквивалентно вашему предложению. - person mickzer; 25.11.2015
comment
@mickzer На самом деле я не уверен, что это так. Попробуйте строку 111 с вашим редактированием и с моим. - person templatetypedef; 25.11.2015