Автоматы Push Down, которые производят переворачивание и реверс строки - PullRequest
1 голос
/ 13 ноября 2010

Алфавит: 0, 1

Рассмотрим переворот, чтобы перевернуть каждый символ: 0 -> 1;1 -> 0 Итак, если w = 0011, то w-flip = 1100

Рассмотрим обратное отображение символов в обратном порядке. Итак, если w = 01101, то w-reverse = 10110

Теперь яя пытаюсь создать КПК, который принимает строку w, а затем печатает w, печатает (w-flip-reversed)

w = 011
w-flip = 100
w-flip-reverse = 001

Таким образом, это вывело бы: "011001"

Рассмотрим #быть пустым персонажем.Строка должна начинаться с # 011 #

Таблица переходов выглядит примерно так:

State:    Symbol Read:    Next State:    Head Instruction:
start     #               r1             L

И так далее

Есть идеи?

1 Ответ

2 голосов
/ 13 ноября 2010

Распечатать строку просто (надеюсь).Распечатать флип так же просто, как распечатать 0, когда вы читаете 1 и наоборот.

Черновой набросок, чтобы вы начали разворот:

  • Вам нужно место, чтобы поместить строку по частям, которая поддается переворачиванию, так что хранилище «первым пришел-последним вышел» идеально (что это может быть в КПК?).
  • Затем вам нужно следить за концом строки, чтобы вы знали, когда переключаться с хранения строки для простого обращения к выводу.
  • , затем вам нужно извлечь каждый фрагмент строки вправильный обратный порядок (который, если сохраненный FILO тривиален) и выводит его, останавливаясь, когда вы достигаете конца строки.

В вашем случае вам нужно будет поместить перевернутую строку в хранилищедля разворота.

...