Схема машины Тьюринга для счетчика - PullRequest
2 голосов
/ 14 ноября 2010

Я должен нарисовать перечислитель для языка 0 ^ k1 ^ k (k> = 0).Я не уверен, чем это отличается от построения диаграммы состояния машины Тьюринга для этого языка: насколько я понимаю, мне нужно создать перечислитель, который распознает вышеупомянутый язык, учитывая все строки выше {0,1}, путем моделирования Тьюрингамашина, которая распознает этот язык в строке i для шагов i, что я не мог придумать, как это сделать, используя диаграмму состояний, но мой учитель указал, что именно так мы доказываем эквивалентность между перечислителем и машиной Тьюринга, поэтому яМы подумали, что нам нужно использовать функцию перехода, определенную для перечислителей, которая делает диаграмму похожей на машину Тьюринга, которая распознает 0 ^ k1 ^ k, только вместо того, чтобы перейти к qaccept, мы переходим к qprint для входных данных на языкетогда для входных данных, которые должны быть отклонены, мы печатаем эпсилон?Но как нам создать бесконечное количество строк над алфавитом {0,1}?В исходном состоянии рабочая лента и лента для печати пусты.Может кто-нибудь уточнить эти моменты для меня?Может быть, я неправильно понимаю.

Ответы [ 3 ]

3 голосов
/ 15 ноября 2010

Я думаю, что у меня наконец-то ясное представление о перечислителе, перечислитель не должен читать ввод, он создает слова на языке, для которого он построен: вот алгоритм:

  1. print epsilonна выходной ленте
  2. напишите 01 на рабочей ленте
  3. вернитесь к передней части ленты и скопируйте ее содержимое на выходную ленту
  4. вернитесь к самому левому 0, замените его на 1, перейдите к крайнему правому значению 1 и добавьте два 1. в конце.
  5. вернитесь к этапу 3

alt text

1 голос
/ 15 ноября 2010

Я подумал о другом немного другом алгоритме, который создает меньшее количество состояний и использует только {0, blank} на своей рабочей ленте: alt text

0 голосов
/ 14 марта 2019

Я думаю, у вас может быть ошибка. на этапе 4 вы написали «вернуться к крайнему левому 0, заменить его на 1, перейти к крайнему правому 1 и добавить два 1 в конце» я думаю, что это должно быть: «вернуться к крайнему левому 1, заменить его на 0, перейти к крайнему правому 1 и добавить два 1 в конце»

...