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

Косовская Татьяна Матвеевна

МАШИНЫ ТЬЮРИНГА

МАТЕМАТИЧЕСКОЕ ПОНЯТИЕ АЛГОРИТМА

Понятие алгоритма прочно вошло в жизнь математиков, а особенно людей, тесно связанных с вычислительной техникой. Зачастую мы даже не задумываемся, что же это такое, а используем как некое интуитивное понятие. Однако история возникновения этого понятия восходит к глубокой древности.

Термин алгоритм или алгорифм (записываемый латинскими буквами как algorithm) имеет в своем составе видоизмененное географическое название Хорезм и обязан своим происхождением великому средневековому ученому (приблизительно 783-850 гг.) Мухаммаду ибн Муссе аль Хо-резми (то есть из Хорезма).

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

ритмы умножения и деления чисел (что было очень трудно до повсеместного использования позиционной системы счисления) и т. п.

В начале XX века были сформулированы задачи нахождения единого процесса решения ряда родственных задач с параметрами. Если с нахождением такого процесса все было более или менее ясно - достаточно предъявить такой процесс, который решает требуемую задачу, то что же делать, если процесс найти не удалось? Мы плохо искали или его не существует? Ответы на эти вопросы были особенно важны в связи с программой Д. Гильберта формализации всей математики.

Первые попытки дать математическое определение алгоритма привели приблизительно к следующим требованиям:

- Определенность данных (вид исходных данных строго определен).

- Дискретность (процесс разбивается на отдельные шаги).

- Детерминированность (результат каждого шага строго определен в зависимости от данных, к которым он применен).

- Элементарность шагов (переход на один шаг прост).

- Направленность (что считать результатом работы алгоритма, если следующий шаг невозможен).

- Массовость (множество возможных исходных данных потенциально бесконечно).

Несмотря на недостатки этого определения (например, что такое «переход на один шаг прост»?), это интуитивное определение может служить для решения многих задач. Однако в современной математике и информатике активно используются алгоритмы, не удовлетворяющие такому интуитивному определению, например недетерминированные вычисления, алгоритмы с оракулом, «зацикливающиеся» алгоритмы и т.п.

Для математического уточнения определения алгоритма, начиная с 30-х годов

'Нер^оКагал&Но oof. алгоориЛжм понимали яроиуОолъНфл сЛрога определенном

tc решение Лой или иной каНкреЛНой ¿лрлш

XX века, были введены различные математические понятия алгоритма. Одним из наиболее важных для вычислительной техники оказалось понятие машины Тьюринга (или машины Тьюринга-Поста), введенное и опубликованное практически независимо Тьюрингом и Постом.

ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ

Машина Тьюринга является математическим, а не техническим понятием. Однако те, кому ближе «железные» объекты, могут представлять ее как вычислительное устройство, имеющее потенциально бесконечную ленту, разделенную на ячейки (то есть в любой момент работы слева или справа к конечной ленте можно добавить недостающую ячейку, содержащую специальный символ, называемый пустым). На этой ленте могут быть записаны слова в некотором заранее фиксированном алфавите. По ленте может перемещаться пишущая-читающая головка, обозревающая одну из ячеек. В зависимости от состояния машины и содержимого обозреваемой ячейки, машина может, в соответствии с командой программы, изменить (или не изменять) состояние, заменить (или не заменять) содержимое обозреваемой ячейки, сдвинуть головку на одну ячейку влево, или вправо, или не сдвигать ее.

С математической точки зрения, машина Тьюринга задается двумя алфавитами и программой. Алфавит А = {а1, ... , ап} -внешний алфавит символов (содержащий, в частности, пустой символ, который здесь мы будем обозначать посредством *). Алфавит 2 = |д0, q1, ... , qk} - внутренний алфавит состояний. При этом q1 называется начальным состоянием машины Тьюринга, а q0 - ее заключительным состоянием.

Команда машины Тьюринга имеет вид

qr а  qt 5 а, где 5 е {Ь, Я, _} и обозначает, соответственно, сдвиг влево, вправо или отсутствие сдвига головки.

Эта команда читается следующим образом: «Если машина Тьюринга находится в состоянии qr и в обозреваемой ячейке записан символ а,, то этот символ заменяется

«пергхоф Нл о$иЯ <илг п£оа&»

на а,, головка производит сдвиг 5, и машина Тьюринга переходит в состояние qt».

Две команды называются согласованными, если они либо имеют различные левые части, либо полностью совпадают. Это требование обеспечивает детерминированность вычисления.

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

Конфигурацией машины Тьюринга называется слово вида

Ь1 ... Ьр-1 ^ ЬР ... ь1, где Ь1 ... Ьр_1 Ьр ... Ь1 - слово в алфавите А,

кожу блифе объемам,

пре^айабля^^ ее клк исмийел-й&ое ус&ройсЛ&о, имеющее шнйеЩиллъЯо беакоНегЩю леК&у, рАуделеКЩю ягейки...

записанное на ленте (причем слева и справа от этого слова находятся только пустые ячейки ленты, на левом и правом концах этого слова может находиться не более одного пустого символа), машина находится в состоянии q и обозревает р-ый символ этого слова.

Для любителей технических устройств приведенная конфигурация соответствует следующей ситуации

Машина Тьюринга всегда начинает работу в начальной конфигурации вида q1X, где X - исходные данные, а заканчивает в случае, когда пришла в заключительное состояние

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

Машина Тьюринга заканчивает работу над данными X, если она пришла в состояние д0. Результатом работы машины Тьюринга будет слово, записанное на ленте. При этом говорят, что машина Тьюринга применима к данным X. Если в процессе работы с данными X машина Тьюринга никогда не приходит в состояние или в процессе ее работы ни одна из команд программы не может быть применена, то говорят, что машина Тьюринга не применима к данным X.

КАК ЖЕ РАБОТАЕТ МАШИНА ТЬЮРИНГА?

Рассмотрим несколько примеров машин Тьюринга.

Пример 1.

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

Напомним, что вид исходных данных для любого алгоритма должен быть строго определен. Поэтому нельзя написать маши-

ну Тьюринга, вычисляющую сумму двух чисел, пока не задана система счисления. Унарная система счисления - это так называемая единиричная (или палочковая) система: каково число - столько единичек (палочек).

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

1. Сотрем первую единицу.

2. Будем сдвигать головку вправо, пока не увидим знак +, который заменим на 1.

3. Будем сдвигать головку влево, пока не увидим знак * (пустой символ).

4. Сдвинем головку на один символ вправо и остановимся.

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

1.1) q1 1  q2 *

2.1) q2 1  q2 Я 1

2.2) q2 +—> q3 1 3.1) q3 1  q3 L 1 4.1) qз *  qo Я *

Запишем протокол работы этой машины Тьюринга, вычисляющей 2 + 3. q111 + 111 (по 1.1) ^ q2 1 + 111 (по 2.1) ^ 1 q2 +111 (по 2.2 ) ^ 1 q3 1111 (по 3.1 ) ^ q3 11111 (по 3.1 ) ^ q3 *11111 (по 4.1 ) ^ q0 11111

В этой машине Тьюринга был использован алфавит {*,1,+}. Однако можно было бы использовать и алфавит {*,1}, при этом исходные данные разделяются знаком * , а в команде 2.2) вместо + следует поставить *.

Задание 1.

Написать машину Тьюринга, заменяющую в записи десятичной дроби знак «,» (запятая) на знак «.» (точка).

***** Ь1 Ьр-1 Ьр Ьр+1 Ь *****

т

Уровень 1. Определить внешний алфавит машины Тьюринга, исходную и заключительную конфигурации. Составить план работы машины Тьюринга.

Уровень 2. Написать программу машины Тьюринга и протокол ее работы над числом л (при л = 2,1 и л = 123, 728).

Уровень 3. Проведите исследования, сколько конфигураций в процессе работы этой машины Тьюринга появится при работе над числом, имеющим вид

а1 а2 ... ап , Ь1 Ь2 ... Ьт где а1 а2... ап Ь1Ь2... Ьт- десятичные цифры.

Пример 2.

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

Начальная конфигурация машины Тьюринга будет q1 X*У, где X и У - двоичные записи натуральных чисел. Требуется, чтобы заключительной конфигурацией была q0 X, где X - двоичная запись суммы. Для этого разработаем план работы машины Тьюринга.

1. «Добежим вправо» до разделяющего аргументы пустого символа *.

2. «Добежим вправо» до последней непомеченной цифры числа У.

3. Запомним эту цифру и пометим ее. Отметим, что машина Тьюринга может запоминать что-либо только номером состояния. Пометить цифру можно, например, заменив 0 на а, а 1 на Ь.

4. «Добежим влево» до последней непомеченной цифры числа X, запомним эту цифру и пометим ее.

5. «Добежим влево» до первой цифры числа X и отступим на одну клетку влево.

6. «Добежим влево» до первой цифры числа, полученного сложением просмотренных частей X и У. Отступив на одну клетку влево, запишем сумму запомненных цифр, при этом, если складывались 1 + 1, то записываем 1 и запоминаем, что к сумме следующих двух цифр будет необходимо прибавить 1.

« "Ообефиж ра^феляощего

7. «Добежим вправо» до *, стоящей после последней цифры числа вычисленной части суммы и перейдем к выполнению п. 1 нашего плана.

8. Если одно из слов (X либо У) оказалось короче другого, то *, стоящую перед соответствующим словом будем запоминать для сложения как цифру 0.

9. Если оба аргумента полностью помечены, то сотрем помеченные цифры, переведем головку в начало результирующего слова и остановимся.

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

Пример 3.

Написать программу машины Тьюринга, осуществляющую удвоение слова в алфавите {а, Ь}.

Начальная конфигурация машины Тьюринга имеет вид q1X , где X - слово в алфавите { а, Ь}. Конечная конфигурация имеет вид q0X*X.

План работы машины Тьюринга.

1. Запомним текущий символ слова и пометим его. Для запоминания символа а будем использовать состояние q2, а для запоминания символа Ь - состояние q3. Помечать символы будем, записывая вместо них соответственно а и /3.

2. «Добежим вправо» до *, стоящей после исходного слова. Сдвинемся на одну ячейку вправо, изменив состояние q2 на q4, а состояние q3 на q5.

3. «Добежим вправо» до *, стоящей после дубля скопированной части исходного слова и на ее место запишем запомненную букву. Изменим состояние на q6.

4. «Пробежим влево» вдоль дубля скопированной части исходного слова и на символе * изменим состояние на q7.

5. «Пробежим влево» вдоль не скопированной части исходного слова до помеченного символа. Сдвинем головку на одну ячейку вправо и перейдем в состояние q8.

6. Если обозревается буква, то перейдем в состояние q1 и к пункту 1 нашего плана.

7. Если же обозреваемым символом является *, то это означает, что исходное слово полностью переписано, и перейдем в состояние q9, сдвинув головку на одну ячейку влево.

8. В состоянии q9 будем двигаться влево, каждый раз заменяя а на а, Ь на Д пока не увидим *.

9. Перейдем в заключительное состояние и сдвинем головку на одну ячейку вправо.

Для большей наглядности программы в тех случаях, когда не важно, какой именно из символов а или Ь записан в обозреваемой ячейке, будем в команде писать символ Аналогично вместо а или Д будем писать символ г.

Пусть 5 е {а, Ь}, г е {а, Д}.

1.1) ql а q2 Я а

1.2) ql Ь qз Я Д

2.1) q2 q2 Я 5

2.2) qз q3 Я 5

2.3) q2 * qA Я *

2.4) qз * q5 Я *

3.1) q4 q4 я 5

3.2) q5 q5 Я 5

3.3) q4 * q6 а

3.4) q5 * q6Ь

4.1) q6 q6Ь 5

4.2) q6 * q7 Ь *

5.1) q7 q7 Ь 5

5.2) q7 г q8 Я г

6) q8 5  q1 5

7) q8 *  q9 Ь *

8.1) q9) а  q9) Ь а

8.2) q9 Д  q9 Ь Ь 9) q9 *  q0 Я *

Запишем протокол работы этой машины Тьюринга над словом Ьа. q1 Ьа (по 1.2) ^ Д q3 а (по 2.2) ^ Да q3 * (по 2.4) ^ Да *q5 * (по 3.4) ^ Да *q6 Ь (по 4.1) ^ Да q6 *Ь (по 4.2) ^ Д q7 а*Ь (по 5.1) ^ q7 Да*Ь (по 5.2) ^ Д q8 а*Ь (по 6) ^ Д q1 а*Ь (по 1.1) ^ Да q2 *Ь (по 2.3) ^ Да * q4 Ь (по 3.1) ^ Да*Ь q4 * (по 3.3) ^ Да*Ь q6 а (по 4.1) ^ Да* q6 Ьа (по 4.1) ^ Да q6 * Ьа (по 4.2) ^ Д q7 а Ьа (по 5.2) ^ Да q8 *Ьа (по 7) ^ Д q9 а*Ьа (по 8.1) Да*Ьа (по 8.2) ^ q9 *Ьа*Ьа (по 9) ^ q0 Ьа*Ьа

Задание 2.

Написать машину Тьюринга, осуществляющую инверсию слова в алфавите А = {а, Ь}.

Уровень 1. Определить внешний алфавит машины Тьюринга, исходную и заключительную конфигурации. Составить план работы машины Тьюринга.

Уровень 2. Написать программу машины Тьюринга и протоколы ее работы над словами Ьа и ЬаЬЬа.

Уровень 3. Проведите исследования, сколько конфигураций в процессе работы этой машины Тьюринга появится при работе над словом, имеющим длину записи п.

МОДИФИКАЦИИ МАШИН ТЬЮРИНГА

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

О том, зачем это нужно, подробно поговорим позже, когда будем рассматривать такие понятия, как сложность алгоритма (временная и ёмкостная). Сейчас только отметим, что все шаги машины Тьюринга считаются равными в смысле затрат времени на их выполнение.

Отметим основные положения, определяющие классическую машину Тьюринга. Одна лента. Одна головка. Команды согласованы.

Убирая эти ограничения, получим различные модификации машины Тьюринга.

МНОГОЛЕНТОЧНЫЕ МАШИНЫ ТЬЮРИНГА

Более точно, следовало бы написать ^-ленточные машины Тьюринга при фиксированном к. В этой модели предполагается, что имеется к лент, на каждой из которых может быть записано свое слово. Головка обозревает одновременно по одной ячейке на каждой ленте и, в зависимости от их содержимого, может изменить или не изменять содержимое каждой из обозреваемых ячеек, сдвинуться (или не сдвигаться) на одну ячейку влево или вправо, причем на каждой ленте сдвиг может быть разным.

Команда к-ленточной машины Тьюринга имеет вид

' S1 л ( 1 \ а!

ак V У зк V 0 V  /

где Б1, ..., Бке {Ь, Я, _} и обозначают соответственно сдвиги влево, вправо или отсутствие сдвига головки.

Эта команда читается следующим образом: «Если машина Тьюринга находится в состоянии и в обозреваемых ячейках лент записаны соответственно символы а1, ..., аД то эти символы заменяются соответственно на а1, ..., аД головка производит сдвиги Б1, ..., Бк и машина Тьюринга переходит в состояние qt».

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

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

^ модеме

программы, но сама программа не была приведена из-за ее чрезмерной громоздкости.

Пример 4.

Написать 3-ленточную машину Тьюринга, вычисляющую сумму двух чисел, записанных в двоичной системе счисления.

Начальная конфигурация машины

Тьюринга будет чг

*

V У

, где X и У - двоич-

ные записи натуральных чисел. Требуется, чтобы заключительной конфигурацией была

Чо

У Z

, где Z - двоичная запись суммы. Для

этого разработаем план работы машины

Тьюринга.

1. Установим головку машины на последние символы записей чисел X и У.

2. Будем складывать числа «в столбик» поразрядно,

3. Запоминая перенос единицы в следующий разряд с помощью дополнительного состояния.

4. Символ * перед более короткой записью числа будем интерпретировать как цифру 0.

5. При достижении левого края обеих записей остановиться.

1.1) Чг

/ \ * г я)

Ч1 я

* *

V 0 V 0 V 0

ч

г

1.2) 41

1.3) 41

£2 *

V У / \

* *

V У *

41

41

Я

1.4) 41

2.1) 42

2.2) 42

2.3) 42

2.4) 42

'Я л

* *

V УЧ У

V * ^

3.1) 4з

3.2) 4з

3.3) 4з

3.4) 4з

4.1) 42

* *

V У '0Л

*

V У

О

*

V У

*

V У 1

*

V У

О

*

V У

О

*

V У 1

*

V У 1

*

V У *

О

*

V У

4 2

4 2

4 2

4 2

4з

4 2

4з

4з

4 з

4 2

V У V У

(ь1 ' 0л

ь 0

ь V У 0 V У

' ь 1 ' 0л

ь 1

ь V У 1 V У

' ь 1 Г 1'

ь 0

ь V У 1 V У

' ь 1 Г 1л

ь 1

ь V У 0 V У

' ь 1 ' 0л

ь 0

ь V У 1 V У

' ь 1 ' 0л

ь 1

ь V У 0 V У

' ь 1 Г 1л

ь 0

ь V У 0 V У

' ь 1 V

ь 1

ь V У 1 V У

( 1 ( * 1

ь 0

ь 0

(*1 / \ (*1

1  4 2 ь 1

* V 0 Г 01 ь V У Г ь 1 1 V У (Г011

*  4 2 Г* 1

* 0 Г11 ь V У Г ь 1 0 V У (Г1 1

*  4 2 *

* V 0 ( * 1 ь V У ( 1 1 V У ( * 1

0  4 2 ь 0

* 0 ( *1 ь V У ( 0 V 0 (* 1

1  4 з ь ГГ1 11

* 0 (Г01 ь У Г ь 1 0 V У (Г01

*  4 2

* V 0 (11 ь V У Г ь 1 0 V У (Г 1 11

*  4з *

* 0 (* 1 ь К У Г Я1 0 V 0 (* 1

*  4 0 Я Г* 1 Г* 1

* V 0 (* 1 Я V У Г Я1 V 0 (* 1

*  4 0 Я Г* 1

* ^Ч 0 V 0 1 V 0

4.2) 42

4.3) 42

4.4) 42

4.5) 4з

4.6) 4з

4.7) 4з

4.8) 4з

5.1) 42

5.2) 4з

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

Задание 3.

Написать двуленточную машину Тьюринга, осуществляющую инверсию слова в алфавите А = {а, Ь}.

Уровень 1. Определить внешний алфавит машины Тьюринга, исходную и заключительную конфигурации. Составить план работы машины Тьюринга.

*

*

£

2

*

*

О

1

О

1

О

1

О

1

Уровень 2. Написать программу машины Тьюринга и протоколы ее работы над словами Ьа и ЬаЬЬа.

Уровень 3. Проведите исследования, сколько конфигураций в процессе работы этой машины Тьюринга появится при работе над словом, имеющим длину записи п. Сравните полученное количество конфигураций с тем, которое получено в задании 2.

МНОГОГОЛОВЧАТЫЕ

МАШИНЫ ТЬЮРИНГА

...имеемся т гомо&ж, обо^ре&а&ь одАу ягейку.

каждая ее% ко&ормх

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

Команда т-головчатой машины Тьюринга имеет вид

Чг (а,1, ..., а,т)  ^ (Б1, ..., Бт)(а/, ..., ат), где Б1, ..., Бте{Ь, Я, _} и обозначают соответственно сдвиги влево, вправо или отсутствие сдвига головки.

Задание 4.

Написать двухголовчатую машину Тьюринга, осуществляющую инверсию слова в алфавите А = {а, Ь}.

Уровень 1. Определить внешний алфавит машины Тьюринга, исходную и заключительную конфигурации. Составить план работы машины Тьюринга.

Уровень 2. Написать программу машины Тьюринга и протоколы ее работы над словами Ьа и ЬаЬЬа.

Уровень 3. Проведите исследования, сколько конфигураций в процессе работы этой машины Тьюринга появится при работе над словом, имеющим длину записи п. Сравните полученное количество конфигураций с тем, которое получено в заданиях 2 и 3.

Задание 5.

Как можно сделать обобщение машин Тьюринга с к лентами и т головками? Как при этом будет выглядеть команда?

Задание 6.

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

НЕДЕТЕРМИНИРОВАННЫЕ МАШИНЫ ТЬЮРИНГА

Недетерминированные машины Тьюринга получаются, если в программе клас-

сической машины Тьюринга разрешить использование несогласованных команд. Как же следует выполнить такую пару команд, если, например, одна предписывает изменить содержимое ячейки и в том же состоянии сдвинуться влево, а другая - не изменяя содержимого ячейки, сдвинуться вправо и изменить состояние? Для выполнения такой пары команд лента недетерминированной машины размножается, и на каждой ленте выполняется ровно одна из команд. Дальнейшие вычисления на каждой ленте продолжаются независимо.

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

- этап угадывания, при реализации которого лента размножается, и на каждой из них выписывается «претендент» на решение;

- этап проверки, при реализации которого машина работает в детерминирован-

"^едепермиЯиро^лЯЯие м/гмиЯи "ШьюриЯга полуготпсЯ-, есми ... feafáeMxtoñií имол-ъуоб&Лие Мсогллсо&лККих кожлЯд...

ном режиме и проверяет конкретного «претендента» на то, является ли он решением.

Вместо одного заключительного состояния q0 обычно используют два qY и qN (Yes и No). Недетерминированная машина Тьюринга заканчивает работу в состоянии qY если хоть на одной из лент она пришла в состояние qY. Если же на всех лентах недетерминированная машина Тьюринга пришла в состояние qN, то и вся машина заканчивает работу в этом состоянии qN.

ДЛЯ ЧЕГО ЖЕ НУЖНЫ

МАШИНЫ ТЬЮРИНГА?

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

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

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

В настоящее время активно исследуется вопрос о соотношении классов Р и ОТ, определенных в терминах машин Тьюринга.

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

Класс NP - это класс предикатов, вычислимых на недетерминированных машинах Тьюринга за число шагов, находящихся в полиноминальной зависимости от длины записи исходных данных.

Вопрос о том, совпадают ли эти два класса или имеется строгое включение Р с ОТ, объявлен одной из сложнейших задач XXI века.

Несмотря на абстрактность этих определений, вопрос о совпадении или несовпадении этих двух классов означает, например, возможность или невозможность быстро (за полином шагов) решать любую переборную задачу (затратив минуты или часы, вместо годов или столетий, на ее решение).

Но об этом в следующий раз.

© Наши авторы, 2005. Оиг аиНчоге, 2005.

Косовская Татьяна Матвеевна, кандидат физико-математических наук, доцент кафедры1 математики Государственного Морского Технического Университета.