Автомат Pushdown: пустой ввод против пустого стека - PullRequest
1 голос
/ 02 мая 2019

У меня окончательный выпуск теоретической вычислительной науки, и во время учебы я застрял на чертеже автоматов (PDA).

Последний переход почти всегда

image

Я понимаю, что это означает, что вы не потребляете ни одной входной строки, извлекаете символ конца стека и ничего не помещаете в стек.

Где я застрял, это не проверяет, является ли входная строка пустой, просто что символ конца стека находится на вершине стека.

Для такого языка, как 0 n 1 n , мы нажимаем символ конца стека, затем нажимаем 0 каждый раз, когда 0 читается из ввода. На первой 1 мы начинаем выталкивать 0 из стека. В идеальном мире, как только мы доберемся до конца входной строки, в стеке будет только символ конца стека, и мы сможем выполнить этот последний переход. Что произойдет, если на входе еще 1 с. Например, строка ввода 00111.

Не могли бы мы использовать переход image в состояние принятия, оставляя для использования оставшиеся символы?

Должен ли быть переход из конечного состояния в какое-то мертвое состояние для учета оставшихся входных символов?

1 Ответ

0 голосов
/ 03 мая 2019

Для такого языка, как 0 ^ n 1 ^ n, мы нажимаем символ конца стека, затем нажимаем 0 каждый раз, когда 0 читается из ввода. На первой 1 мы начинаем выталкивать 0 из стека.

Исправьте пока.

В идеальном мире, как только мы доберемся до конца входной строки, единственное, что в стеке будет символом конца стека, и мы сможем выполнить этот последний переход.

Это не обязательно тот случай, когда в этом случае вообще должны быть переходы. Это в определенной степени зависит от того, как вы определяете КПК и как вы хотели бы, чтобы ваш КПК работал. КПК обычно могут принимать, принимая состояние, пустой стек или как пустое состояние, так и пустой стек вместе. Я предпочитаю последний из них, поскольку он оставляет меньше всего воображению. Однако все они являются полностью эквивалентными определениями с точки зрения вычислительной мощности.

Что произойдет, если на входе еще 1 с. Например, строка ввода 00111.

Хороший вопрос. Если у вас есть 1 на входе после очистки стека, строка не на том языке, который вы пытаетесь принять. На этом этапе вам нужно решить, как вы хотите отклонить этот ввод. Один из распространенных методов - просто оставить неопределенным переход, который необходимо выполнить в таких случаях. Когда это происходит и ввод остается, машина, как говорят, "сбой" и, по умолчанию, она не может принять ввод. Другой вариант, как вы могли бы предположить, - добавить новое «мертвое» состояние, чтобы явно кодировать операцию исчерпания любого оставшегося ввода.

Если вам необходимо иметь явные мертвые состояния и как вы хотите указать, что ваш КПК принимает подтверждение, это в основном соглашения, которые вы можете выбрать (или которые указаны для вас вашим инструктором).

...