Машина Тьюринга — различия между версиями
(→Примеры машин Тьюринга: добавил пример с палиндромом, неформальное описание) |
(→Проверка того, является ли слово палиндромом: добавил таблицу переходов) |
||
Строка 80: | Строка 80: | ||
** если последний символ совпадает с запомненным, стереть его, перейти в начало ленты и повторить с первого шага | ** если последний символ совпадает с запомненным, стереть его, перейти в начало ленты и повторить с первого шага | ||
** в случае несовпадения перейти в отвергающее состояние | ** в случае несовпадения перейти в отвергающее состояние | ||
+ | |||
+ | Формально: <tex>\Sigma = \{0, 1\}</tex>, <tex>\Pi = \{0, 1, B\}</tex>, <tex>Q = \{S, F_0, F_1, B_0, B_1, R \}</tex>. Таблица функции <tex>\delta</tex> приведена ниже: | ||
+ | {| border="0" cellspacing="5" | ||
+ | |- | ||
+ | |width="30"| | ||
+ | |width="100"| <tex>0</tex> | ||
+ | |width="100"| <tex>1</tex> | ||
+ | |width="100"| <tex>B</tex> | ||
+ | |- | ||
+ | | <tex>S</tex> | ||
+ | | <tex>\langle F_0, B, \rightarrow \rangle</tex> | ||
+ | | <tex>\langle F_1, B, \rightarrow \rangle</tex> | ||
+ | | <tex>\langle Y, B, \downarrow \rangle</tex> | ||
+ | |- | ||
+ | | <tex>F_0</tex> | ||
+ | | <tex>\langle F_0, 0, \rightarrow \rangle</tex> | ||
+ | | <tex>\langle F_0, 1, \rightarrow \rangle</tex> | ||
+ | | <tex>\langle B_0, B, \leftarrow \rangle</tex> | ||
+ | |- | ||
+ | | <tex>F_1</tex> | ||
+ | | <tex>\langle F_1, 0, \rightarrow \rangle</tex> | ||
+ | | <tex>\langle F_1, 1, \rightarrow \rangle</tex> | ||
+ | | <tex>\langle B_1, B, \leftarrow \rangle</tex> | ||
+ | |- | ||
+ | | <tex>B_0</tex> | ||
+ | | <tex>\langle R, B, \leftarrow \rangle</tex> | ||
+ | | <tex>\langle N, 1, \downarrow \rangle</tex> | ||
+ | | <tex>\langle Y, B, \downarrow \rangle</tex> | ||
+ | |- | ||
+ | | <tex>B_1</tex> | ||
+ | | <tex>\langle N, 0, \downarrow \rangle</tex> | ||
+ | | <tex>\langle R, B, \leftarrow \rangle</tex> | ||
+ | | <tex>\langle Y, B, \downarrow \rangle</tex> | ||
+ | |- | ||
+ | | <tex>R</tex> | ||
+ | | <tex>\langle R, 0, \leftarrow \rangle</tex> | ||
+ | | <tex>\langle R, 1, \leftarrow \rangle</tex> | ||
+ | | <tex>\langle S, B, \rightarrow \rangle</tex> | ||
+ | |} |
Версия 17:35, 6 декабря 2012
Содержание
Введение
Машина Тьюринга (Turing machine) — абстрактный вычислитель, предложенный британским математиком Аланом Тьюрингом в 1936 году для формализации понятия алгоритма.
Неформально машина Тьюринга определяется как устройство, состоящее из двух частей:
- бесконечной одномерной ленты, разделённой на ячейки,
- головкой, которая представляет из себя детерминированный конечный автомат.
При запуске машины Тьюринга на ленте написано входное слово, причём на первом символе этого слова находится головка, а слева и справа от него записаны пустые символы. Каждый шаг головка может перезаписать символ под лентой и сместиться на одну ячейку, если автомат приходит в допускающее или отвергающее состояние, то работа машины Тьюринга завершается.
Определение
Определение машины
Формально машина Тьюринга определяется как кортеж из восьми элементов
, где- — алфавит, из букв которого могут состоять входные слова
- — символы, которые могут быть записаны на ленту в процессе работы машины
- — пробельный символ (от слова blank)
- — множество состояний управляющего автомата
- — допускающее состояние автомата
- — отвергающее состояние автомата
- — стартовое состояние автомата
- — всюду определённая функция перехода автомата
Отметим, что существуют различные вариации данного выше определения (например, без отвергающего состояния или с множеством допускающих состояний), которые не влияют на вычислительные способности машины Тьюринга.
Определение процесса работы
Кроме формального определения самой машины требуется также формально описать процесс её работы. В определении для простоты будем предполагать, что головка в процессе работы не записывает на ленту символ
. Это не ограничивает вычислительной мощности машин Тьюринга, поскольку для каждой машины можно сопоставить аналогичную ей, но не пищущую на ленту.Назовём конфигурацией машины Тьюринга тройку
, где — текущее состояние автомата, а — строки слева и справа от головки до первого пробельного символа соответственно. В данной записи головка находится над ячейкой, на которой написана первая буква (или , если ).В дальнейшем используются следующие обозначения:
,Определим на конфигурациях отношение перехода
:- если , то
- если , то
- если , то
Особо следует рассмотреть случай переходов по пробельному символу:
- если , то
- если , то
- если , то
Очевидно, что определённое отоношение является функциональным: для каждой конфигурации
существует не более одной конфигурации , для которой .Для машины Тьюринга, которая пишет символ
на ленту также можно дать аналогичное формальное определение. Оно будет отличаться тем, что символы в строчках конфигурации могут содержать пробелы, и для того, чтобы эти строчки имекли конечную длину, нужно аккуратно учесть наличие пробелов при записи правил перехода. Это предоставляется читателю в качестве упражнения.Результат работы
Машину Тьюринга можно рассматривать как распознаватель слов языка. Пусть
— машина Тьюринга, распознаваемый ей язык определяется как .Также можно рассматривать машины Тьюринга как преобразователь входных данных в выходные. Машина
задаёт вычислимую функцию , причём . Переход автомата в состояние можно интерпретировать как аварийное завершение программы (например, при некорретном входе).Примеры машин-распознавателей и машин-преобразователей будут даны ниже.
Примеры машин Тьюринга
Прибавление единицы
Для начала приведём пример машины-преобразователя, которая прибавляет единицу к числу, записанному на ленте в двоичной записи от младшего бита к старшему. Алгоритм следующий:
- в стартовом состоянии головка идёт вправо от младшего бита к старшему, заменяя все единицы на нули,
- встретив нуль или пробельный символ головка записывает единицу, после чего переходит в состояние ,
- в состоянии головка идёт влево от старшего бита к младшему, не изменяя символы 0 и 1 на ленте,
- встретив в состоянии пробельный символ, головка перемещается на один символ вправо и переходит в состояние , завершая работу.
Следующее определение формализует данный алгоритм:
- ,
-
Проверка того, является ли слово палиндромом
В качестве примера машины-распознавателя приведём машину, распознающую палиндромы над алфавитом
. Алгоритм следующий:- если строка на ленте — пустая, то перейти в допускающее состояние
- надо запомнить первый символ слова в состоянии автомата,
- стереть его,
- перейти в конец ленты:
- если оставшаяся строка на ленте — пустая, то перейти в допускающее состояние
- если последний символ совпадает с запомненным, стереть его, перейти в начало ленты и повторить с первого шага
- в случае несовпадения перейти в отвергающее состояние
Формально:
, , . Таблица функции приведена ниже: