Введение в схемы, автоматы и алгоритмы

          

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


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

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

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

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

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

    Пусть м.Т.

    Тьюрингово программирование
    где P1: q0 |
    Тьюрингово программирование
    q0 | П, q0
    Тьюрингово программирование
    Тьюрингово программирование
    qf | Н.

  • Ясно, что м.Т.
    Тьюрингово программирование
    проходит по массиву палочек слева направо и записывает в первой пустой ячейке новую |.
  • Бинарное кодирование.

    Пусть м.Т.

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

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

    Нетрудно видеть, что эта машина в состоянии q0 находит младший разряд двоичного входа, затем в состоянии q1, идя справа налево, заменяет единицы на нули до тех пор, пока не находит 0 (или

    Тьюрингово программирование
    ) и заменяет его на 1. Следовательно, м.Т.
    Тьюрингово программирование
    вычисляет функцию f(x) = x+1.

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

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

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

Для ее реализации используем один из типичных приемов Тьюрингова программирования - { it расширение алфавита}.Пусть ?'= {a' | a

Тьюрингово программирование
? } и ?1=?
Тьюрингово программирование
?'. М.Т.
Тьюрингово программирование
копирующая вход, работает следующим образом:

  1. отмечает 1-ый символ входа, идет направо, ставит * после входа и возвращается в начало:
    Тьюрингово программирование
  2. в состоянии qa движется направо и записывает a в первую свободную ячейку:
    Тьюрингово программирование
  3. возвращается в отмеченную ячейку и передвигает метку ' на одну ячейку вправо, снова переходя в состояние q2:
    Тьюрингово программирование
  4. увидев символ * в состоянии q5, останавливается:
    Тьюрингово программирование

Из этого описания непосредственно следует, что

Тьюрингово программирование
для любого x
Тьюрингово программирование
{?}*.



Содержание раздела