Как пуш-автомат знает, как читать палиндром?
Например, как КПК узнает, как читать палиндром в L = {a, b}*?
КПК, который принимает палиндромы через {a,b}*:
Итак, исходя из моего рисунка КПК:
Как он узнает, когда первая половина строки находится на последнем терминале (буква алфавита), и, следовательно, знает, как переходить из состояния 0 в состояние 1 (и, кроме того, знает, что "выталкивает" буквы из стека назад, создавая, таким образом, создавая палиндром)?
1 ответ
Это недетерминированный пуш-ап автомат. Ответ на ваш вопрос заключается в том, что он угадывает и может предположить, что правильно угадать. Недетерминированные автоматы принимают строку w, если любой путь, по которому может быть обработан w, приводит к тому, что w принимается.
Если мы определяем принятие как наличие пустого стека в состоянии принятия, то вышеупомянутый NPDA может принять единственный способ, если:
- он помещает некоторые вещи в стек в состоянии q0
- в конце концов он догадывается, что ему нужно прочитать вторую половину строки
- он читает то, что положил в стек, но в обратном порядке, в q1
Есть три "предположения", которые делает NPDA:
- он догадывается, что строка является палиндромом четной длины, когда она угадывает ee/e, где e используется вместо лямбды.
- он догадывается, что строка представляет собой палиндром нечетной длины с a между двумя половинами, когда он угадывает ae/e, где e используется вместо лямбды
- он предполагает, что строка является палиндромом нечетной длины с буквой b между двумя половинами, когда она предполагает, что / е, где е используется вместо лямбды
Каждое из трех приведенных выше предположений также предполагает, что первая половина строки, исключая возможный средний элемент, уже видна.
Это предположение, в конечном счете, будет верным для любого палиндрома, и не будет верным ни для чего, кроме палиндрома, поэтому NPDA принимает PAL.