Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

11.1.1Теория рекурсивных функций

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

Таким образом, мы видим, что с усложнением функций нам приходится применять все более мощные методы для их вычисления. Мы задаемся вопросом, всегда ли возможно найти систему для вычисления функций, независимо от их сложности? Ответ — нет. Поразительный вывод математиков состоит в том, что существуют настолько сложные функции, что для них невозможно найти хорошо определенный пошаговый процесс нахождения выходов в зависимости от входных значений. Таким образом, вычисление этих функций лежит далеко за пределами возможностей любой алгоритмической системы. Эти функции называются невычислимыми (noncomputable), тогда как функции, выходы которых можно найти алгоритмически на основе входных значений, называются вычислимыми (computable).

Изучение вычислимых и невычислимых функций — одна из важных областей, лежащих в основе вычислительной техники. Так как машины могут выполнять только задачи, описанные при помощи алгоритмов, изучение вычислимых функций — это изучение пределов способностей машин. Если мы узнаем, какие способности требуются для выполнения абсолютно всех вычислимых функций, и затем создадим машины, обладающие такими способностями, то сможем быть уверены, что эти машины настолько мощны, насколько вообще могут быть мощны созданные людьми машины. Аналогично, если мы обнаружим, что решение задачи требует вычисления невычислимой функции, то сможем сделать вывод, что такая проблема лежит за пределами возможностей машин.

11.2 Машины Тьюринга

Вспомните, что для того, чтобы машина могла выполнить задачу, алгоритм выполнения этой задачи сначала необходимо найти нам. Следовательно, так как • для решения невычислимых функций алгоритмов не существует, такие функции находятся за пределами возможностей сегодняшних, да и завтрашних компьютеров. В попытке понять подобные ограничения машин многие исследователи создавали и изучали различные вычислительные устройства. Одно из них — машина Тьюринга, предложенная Аланом Тьюрингом в 1936 году, которая до сих пор используется в качестве инструмента для изучения возможностей алгоритмических процессов.

11.2.1Основы машины Тьюринга

Машина Тьюринга состоит из управляющего блока, который может считывать и выводить символы на ленту при помощи головки считывания-записи (рис. 11.2). Лента продолжается до бесконечности с обеих сторон машины и разделена на ячейки, каждая из которых может содержать только один символ из конечного набора символов. Этот набор называется машинным алфавитом.

В любой момент вычисления машина Тьюринга должна находиться в одном из конечного числа состояний. Вычисление на машине Тьюринга начинается в специальном состоянии, называемом начальным состоянием, и прекращается, когда машина достигает другого специального состояния — состояния остановки.

Работа машины Тьюринга состоит из последовательности шагов, которые выполняет управляющий блок машины. Каждый шаг заключается в считывании символа из текущей ячейки ленты (то есть ячейки, которую в данный момент просматривает головка считывания-записи), записи символа в эту ячейку, возможно, перемещении головки считывания-записи на одну ячейку влево или вправо и последующей перемене состояния. Действие, которое требуется выполнить, определяется программой, которая отдает приказы управляющему блоку, основываясь на состоянии машины и содержимом текущей ячейки ленты.

Рассмотрим пример специальной машины Тьюринга. Будем представлять ленту машины в виде горизонтальной полоски, разделенной на ячейки, куда можно записывать символы машинного алфавита. Указывать текущее положение головки считывания-записи машины мы будем, помещая указатель под соответствую-

щую ячейку, которую будем называть текущей ячейкой. Алфавит в нашем примере состоит из символов 0, 1 и *. Лента машины может выглядеть следующим образом:

С читая, что строка символов на ленте обозначает двоичные числа, разделенные звездочками, мы увидим, что на этом отрезке записано значение 5. Наша машина Тьюринга должна увеличивать значение на ленте на 1. Точнее, она считает, что начальная позиция находится на звездочке, которой помечен правый конец строки из нулей и единиц, следовательно, нужно изменить битовую комбинацию слева от звездочки на следующее целое число.