Тверской государственный университет
Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 1683 / 243 | Оценка: 5.00 / 5.00 | Длительность: 14:18:00
ISBN: 978-5-94774-714-0
Специальности: Программист, Математик
Лекция 9:

Алгоритмы: машины Тьюринга

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Тьюрингово программирование

В этом разделе мы приведем примеры вычислений на машинах Тьюринга и рассмотрим некоторые общие приемы, позволяющие комбинировать программы различных м. Т. для получения более сложных вычислений. Будем считать, что ячейки ленты м.Т. занумерованы от -\infty до +\infty, причем в начальной конфигурации головка находится в 1-ой ячейке:

Нумерация ячеек ленты машины Тьюринга

Рис. 9.2. Нумерация ячеек ленты машины Тьюринга

Пример 9.2.Функция f(x)=x+1

  • Унарное кодирование.

    Пусть м.Т. {\cal M}_1=<\{q_0,q_f \},\{\wedge,|\},P_1,q_0,q_f>, где P_{1}: q_{0} |\to  q_{0} | П,  q_{0} \wedge  \to  q_{f} |  Н.

  • Ясно, что м.Т. {\cal M}_1 проходит по массиву палочек слева направо и записывает в первой пустой ячейке новую |.
  • Бинарное кодирование.

    Пусть м.Т. {\cal M}_1^\prime=<\{q_0,q_1,q_f \},\{\wedge,0,1\}, P_1^\prime,q_0,q_f>, где P_1^\prime:

    q_0 0\rightarrow q_0 0 \textit{П},\ \ q_0 1\rightarrow q_0 1 \textit{П},\ \ q_0 \wedge \rightarrow q_1 \wedge \textit{Л},\\q_1 0\rightarrow q_f 1 \textit{Н},\ \ q_1 1\rightarrow q_1 0 \textit{П},\ \ q_1 \wedge \rightarrow q_f 1 \textit{Н}.

    Нетрудно видеть, что эта машина в состоянии q0 находит младший разряд двоичного входа, затем в состоянии q1, идя справа налево, заменяет единицы на нули до тех пор, пока не находит 0 (или \wedge ) и заменяет его на 1. Следовательно, м.Т. {\cal M}_1^\prime\ вычисляет функцию f(x) = x+1.

Пример 9.2. Копирование.

Рассмотрим функцию копирования (дублирования) слов в алфавите \Sigma : copy(x)= x \times x (мы предполагаем, что * \notin  \Sigma ).

Для ее реализации используем один из типичных приемов Тьюрингова программирования - { it расширение алфавита}.Пусть \Sigma ^{'}= \{ a^{'} | a \in  \Sigma  \} и \Sigma _{1}=\Sigma  \cup  \Sigma ^{'}. М.Т. {\cal M}_2, копирующая вход, работает следующим образом:

  1. отмечает 1-ый символ входа, идет направо, ставит * после входа и возвращается в начало:
    q_0 a \rightarrow q_1 a^\prime \textit{П}\ (a \in \Sigma); \ q_1 a \rightarrow q_1 a \textit{П}\ (a \in \Sigma \backslash \{\wedge\}; \ q_1 \wedge \rightarrow q_2 * \textit{Л}; \\ q_2 a \rightarrow q_2 a \textit{Л}\ (a \in \Sigma \cup \{*\}); \ q_2 a^\prime \rightarrow q_a a^\prime \textit{П}\ (a \in \Sigma );
  2. в состоянии qa движется направо и записывает a в первую свободную ячейку:
    q_a b \rightarrow q_a b \textit{П}\ (b \in \Sigma \cup \{*\}); \ \ q_a \wedge \rightarrow q_4 a \textit{Л}\;
  3. возвращается в отмеченную ячейку и передвигает метку ' на одну ячейку вправо, снова переходя в состояние q2:
    q_4 a \rightarrow q_4 a \textit{Л}\ (a \in \Sigma \cup \{*\}); \ q_4 a^\prime \rightarrow q_5 a \textit{П}\ (a \in \Sigma ); \ q_5 a \rightarrow q_2 a^\prime \textit{Н}\ (a \in \Sigma );
  4. увидев символ * в состоянии q5, останавливается:
    q_5 * \rightarrow q_f*\textit{Н}.

Из этого описания непосредственно следует, что q_0x {\vdash}^* xq_f*x для любого x \in  \{ \Sigma \} ^{*}.

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >