Теория алгоритмов. Учебное пособие для специальности 050201.65 – «Математика с дополнительной специальностью «Информатика», направление подготовки 050
.pdfНачальная конфигурация:
(x 1)
единиц
……… |
1 |
1 |
… |
1 |
……… |
|
|
|
|
|
|
▲
q1
Через такт работы заключительная конфигурация имеет вид:
|
|
|
|
|
|
(x 2) |
единиц |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
……… |
|
1 |
|
1 |
|
… |
|
1 |
|
1 |
|
|
……… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
▲ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
q0 |
|
|
|
|
Иными словами, машина M1 вычисляет функцию |
f (x) x 1. |
|||||||||||||
|
1. Построим машину Тьюринга M2, вычисляющую функцию |
||||||||||||||
|
|
|
|
|
|
0,если x 2k,k N0 , |
|
|
|
||||||
|
|
|
|
f (x) |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
1,если x 2k 1,k N0 , |
|
|
|
||||||
т.е. машина |
M2 вычисляет остаток от деления числа |
x |
на 2. |
||||||||||||
|
На ленте записан массив из |
x 1 |
единиц. |
Работа начинается со |
|||||||||||
стандартного |
восприятия |
числа x, |
т.е. считывающая головка находится |
||||||||||||
в состоянии q1 и обозревает последнюю правую единицу массива.
Предлагаем следующий алгоритм вычисления функции. Машина просматривает число справа налево, чередуя состояния q2 и q3.Одновременно машина стирает число. В зависимости от того, в каком состоянии закончен
21
просмотр, машина печатает «0» или «1». Напомним, что для записи нуля понадобится одна единица, для записи единицы понадобится две единицы.
Если x 4, то соответствующая запись на ленте имеет вид: …0111110…
Просматриваем число справа налево, чередуя состояния q2 и q3,
одновременно стираем число:
0 |
|
|
|
|
|
|
1 |
1 |
1 |
1 |
1 |
|
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
q2 |
q3 |
q2 |
q3 |
q2 |
q1 |
Просмотр числа будет завершен в состоянии q2. Значит, число x было чётным, остаток от деления на 2 равен нулю. Печатаем число 0 (одну единицу).
Если x 5, то запись на ленте имеет вид: …01111110…
Просматриваем число справа налево, чередуя состояния q2 и q3 :
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
||
|
|
|
|
1 |
|
1 |
|
1 |
1 |
|
1 |
|
1 |
|
|
|
|||
|
|
|
|
0 |
|
0 |
|
0 |
0 |
|
0 |
|
0 |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
q3 |
q2 |
q3 |
q2 |
q3 |
q2 |
q1 |
|
||||||||||
Просмотр числа завершен в состоянии |
q3 |
Значит, число x нечётное, |
|||||||||||||||||
остаток от деления на 2 равен единице. |
Печатаем число 1 (две единицы). |
||||||||||||||||||
Программа машины |
M2 |
такова: |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
M2 |
|
q1 |
|
q2 |
|
q3 |
|
|
|
q4 |
||||||||
|
0 |
|
|
|
|
|
1Eq0 |
|
1Rq4 |
|
|
1Eq0 |
|
||||||
|
1 |
|
|
0Lq2 |
|
0Lq3 |
|
0Lq2 |
|
|
|
|
|
|
|||||
Заметим, что некоторые требования к работе машины Тьюринга могут быть ослаблены. Так, некоторые авторы записывают число x в унарной системе в виде массива из x единиц. Конкретные задачи допускают либо произвольное расположение считающей головки в начале и в конце работы,
либо конкретное расположение, отличное от стандартного.
22
Задачи для самостоятельной работы
1.Дано число n в восьмеричной системе счисления. Постройте машину Тьюринга, которая бы увеличивала данное число на единицу.
2.Дана десятичная запись натурального числа n 1. Постройте машину Тьюринга, которая уменьшала бы данное число на 1. При этом запись числа n 1 не должна содержать левый нуль.
Например, 100 – 1 = 99, а не 100 – 1 = 099. Начальное положение:
считывающая головка находится над крайним правым символом строки.
3.Дан массив из открывающихся и закрывающихся скобок. Построить машину Тьюринга, которая удаляла бы пары взаимных скобок.
Например, дано: «) ( ( ) ( ( )», надо получить: «)… ( (.».
4.Дана строка из букв a и b. Построить машину Тьюринга, которая
переместит все буквы a в левую часть строки, а все буквы b –
в правую. Считывающая головка находится над крайним левым
символом строки.
5.Даны два целых положительных числа в десятичной системе счисления. Построить машину Тьюринга, которая находит разность этих чисел, если известно, что первое число больше второго, а
между ними стоит знак « – ». Каретка находится над левой крайней цифрой левого числа.
6.Даны два целых положительных числа в различных системах
счисления, одно – в троичной системе счисления, другое – в десятичной. Постройте машину Тьюринга, которая будет находить сумму этих чисел в десятичной системе счисления.
7.Постройте машину Тьюринга, которая преобразует запись числа из двоичной системы счисления в восьмеричную.
23
8.Дана конечная последовательность меток, записанных в клетках ленты подряд, без пропусков. Построить машину Тьюринга, которая будет записывать в десятичной системе счисления число этих меток.
9.На ленте машины Тьюринга в трёх клетках записаны три различные буквы: A, B,C. Считывающая головка в начальном состоянии обозревает последнюю правую букву. Построить машину Тьюринга, которая поменяет местами крайние буквы.
10.На ленте машины Тьюринга записано число в десятичной системе счисления. Построить машину Тьюринга, которая умножает данное число на 2. В начале работы головка находится над крайней левой цифрой числа.
11.На ленте машины Тьюринга записано целое положительное число в десятичной системе счисления. Найти произведение этого числа на 11, если головка обозревает крайнюю правую цифру числа.
12.На ленте машины Тьюринга записано слово, состоящее из букв латинского алфавита a,b,c,d . Подсчитать число вхождений буквы a в заданное слово. Полученное значение записать на ленту левее заданного слова через пробел. Головка обозревает крайнюю левую букву.
13.На ленте машины Тьюринга записано десятичное число.
Определить, делится ли это число на 5 без остатка. Если делится, то справа от числа записать слово «да», если не делится, то записать
«нет». Головка находится где-то над числом.
14.На ленте машины Тьюринга записано число в десятичной системе счисления. Головка находится над правой цифрой. Запишите цифры этого числа в обратном порядке.
24
15.На ленте машины Тьюринга находится массив, состоящий только из символов A и B. Сожмите массив, удалив из него все элементы B.
16.Число n записано на ленте машины Тьюринга массивом меток.
Преобразуйте это значение n по формуле:
n 1,еслиn 5,
|
1, |
если |
n 5, |
(n) |
|||
|
2n, |
если |
n 5. |
|
Головка обозревает крайнюю левую метку.
17.На ленте машины Тьюринга массив из 2n меток. Уменьшите этот массив в 2 раза.
18.Даны два натуральных числа m и n, записанные в унарной системе счисления. Между этими числами стоит знак «?». Выясните отношение между заданными числами и замените знак «?» на один из знаков " ", " " или " ".
19.Найдите произведение двух натуральных чисел m и n, записанных в унарной системе счисления. Соответствующие наборы символов разделены знаком «*». Поместите результат вслед за знаком «=».
20.На ленте машины Тьюринга записано число в двоичной системе счисления. Найти произведение этого числа на себя, если головка обозревает крайнюю правую цифру числа.
21.На ленте машины Тьюринга записано десятичное число. Определить,
делится ли это число на 3 без остатка. Если делится, то справа от числа записать слово «да», если не делится, то записать «нет».
Каретка находится где-то над числом.
22.Дана конечная последовательность меток, записанных в клетки ленты подряд, без пропусков. Построить машину Тьюринга, которая будет записывать в двоичной системе счисления число этих меток.
25
2.4. Операции над машинами Тьюринга
Рассмотрим некоторые комбинации машин Тьюринга.
Произведение машин
Пусть даны две машины Тьюринга M1 |
и M2. Обозначим начальное |
|||||||||
состояние машины M1 через q1, |
а заключительное состояние – |
через q0 . |
||||||||
Обозначим начальное состояние машины M2 |
через |
g1, а заключительное – |
||||||||
через g0. |
Чтобы построить произведение M1 M2 машин, |
отождествим |
||||||||
заключительное |
состояние |
q0 машины M1 |
с начальным состоянием g1 |
|||||||
машины M2. Переобозначим состояния машины M2 : если машина M1 имела |
||||||||||
состояния |
q1,q2,...,qm , а |
машина |
M2 имела |
состояния |
g1,g2,..., gk , |
|||||
то переобозначим состояние |
gi на |
qi m,1 i m. |
|
|
|
|
||||
Соединим программы машин M1 и M2. Построенную новую машину |
||||||||||
M M1 M2 назовем произведением машин |
M1 |
и M2. Машина |
M1 M2 |
|||||||
работает так. |
|
|
|
|
|
|
|
|
|
|
Предъявляем слово машине |
M1, обработав его по своей программе, |
|||||||||
машина M1 в результате получает слово 1. Машина |
M2 получает слово 1 |
|||||||||
в качестве исходного и обрабатывает |
его по своей программе. |
В результате |
||||||||
получаем слово |
2. Будем говорить, что слово |
2 получено из слова |
||||||||
врезультате применения произведения машин M1 и M2 машин:
1 2
M1 M2
Разветвление машин
Построим комбинацию машин Тьюринга, работающую как оператор
условного перехода: если выполняется одно условие, то заключительную ленту
26
машины M1 передаем машине M2, |
если выполняется другое условие, |
то |
||||
заключительную ленту машины M1 |
передаем машине |
M3. Для построения |
||||
такой комбинаций машин выделим в машине M1 |
в качестве заключительных |
|||||
два состояния q0 и |
q0 . |
|
|
|
|
|
Если машина |
M1 в какой-то |
момент приходит |
в состояние |
q0 , |
||
то начинает работать машина M2, |
если машина |
M1 перешла состояние q0 , |
||||
то начинает работать машина M3. |
Построенную таким образом машину |
M |
||||
будем называть разветвлением машины M1 на M2 и |
M3. Разветвление |
|||||
машин обозначим так: |
|
|
|
|
|
|
M2
M M1 .
M3
Разветвления с циклом
Пусть машина M является разветвлением M1 на M2 и M3. Усложним
её работу. Пусть лента, обработанная машиной M2, передаётся как начальная вновь машине M1. Тогда машину M назовем разветвлением машины M1 на
M2 и M3 с циклом и обозначим через:
|
|
|
|
M |
|
|
||
|
M M1 |
|
2. |
|
||||
|
|
|
|
M3 |
|
|
||
Кратное применение разветвления с циклом позволит построить, |
||||||||
например, такую машину: |
|
|
|
|
|
|
|
|
|
|
|
|
|
M3 |
M4 |
|
|
M |
M1 |
M2 |
|
|
|
|
|
|
|
|
|
M6 M7 |
|||||
|
|
|
|
M |
5 |
|
M8. |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|||
|
|
|
27 |
|
|
|
|
|
Работу начинает машина M1, заключительную ленту передает машине
M2. Если M2 придет в состояние q0 , то начинает работать машина M3, затем
– машина M4. Заключительную ленту машина M4 передает машине M2.
Если M2 придет в состояние q0 , то начинает работать машина M5, которая разветвляется на произведение машин M6 M7 и машину M8.
Введённые операции над машинами Тьюринга позволяют из простых машин строить более сложные.
2.5. Тезис Тьюринга
Мы дали строгое определение понятию «алгоритм», отождествив его с машиной Тьюринга. Тогда удаётся строго определить понятие вычислимой функции, как функции вычислимой по Тьюрингу. Как велик класс вычислимых по Тьюрингу функций? Математическая практика дала Тьюрингу повод считать этот класс достаточно широким: функция вычислима по Тьюрингу, если она вычислима с помощью какого-либо алгоритма. Тьюринг сформулировал гипотезу, называемую тезисом Тьюринга.
Тезис Тьюринга
Любая интуитивно вычислимая функция является вычислимой по
Тьюрингу. |
|
|
|
|
Тезис |
Тьюринга |
является |
естественнонаучной |
гипотезой |
о взаимоотношении интуитивного |
(нестрогого) понятия |
«интуитивно |
||
вычислимая функция» и строгого понятия «вычислимая по Тьюрингу функция». Тезис Тьюринга не является строгим математическим утверждением и по этой причине не может быть строго доказан,
а опровергнуть его мог пример хотя бы одной интуитивно вычисляемой функции, не являющейся вычислимой по Тьюрингу. Однако вся математическая практика подтверждает справедливость тезиса Тьюринга.
28
2.6.Неразрешимые множества
Вп.1.3. были определенны разрешимые и перечислимые числовые множества. Приведён пример множества A квадратов целых неотрицательных чисел, которое является перечислимым и разрешимым.
Напомним: множество A перечислимо, если существует алгоритм,
перечисляющий элементы множества A. Множество A разрешимо, если существует алгоритм, применяя который к любому целому неотрицательному числу a, можно выяснить, принадлежит число a
множеству A или нет.
В п.1.3, говоря о перечислимых и разрешимых множествах, мы располагали интуитивным понятием алгоритма.
К настоящему моменту мы имеем точное определение понятия
алгоритма. Алгоритм для нас сейчас – машина Тьюринга, алгоритмический процесс – работа машины Тьюринга.
Утверждение «алгоритм существует (не существует)» равносильно утверждению «существует (не существует) машина Тьюринга». Убедимся,
что существует множество A (с, казалось бы, парадоксальными свойствами)
перечислимое, но неразрешимое. Для доказательства существования такого
множества A занумеруем машины Тьюринга (алгоритм нумерации машины Тьюринга будет рассмотрен в главе 4):
2.6.1
Это означает, что существует алгоритм, который каждой машине Тьюринга M в последовательности 2.6.1 сопоставляет номер (M). Если
(M) i, то машина Тьюринга в последовательности 2.6.1 обозначается через Mi. И наоборот, существует алгоритм, позволяющий по номеру i
найти машину Тьюринга Mi в последовательности 2.6.1.
Пусть A – некоторое подмножество |
множества N0 целых |
неотрицательных чисел. Если машина Тьюринга |
M применима к числу x |
29 |
|
(т.е. машина M , начав работу со стандартного восприятия x, остановится
через конечное число шагов), то будем говорить, что она останавливается на x, и писать Ост(M,x).
|
Множество |
A назовем разрешимым, если |
существуют |
|
две |
такие |
||
машины Тьюринга P и Q, что выполняются условия: |
|
|
|
|
||||
|
|
x A Ocm(P,x), |
|
|
|
|
2.6.2 |
|
|
|
|
|
|
|
|
|
|
|
|
x A Ocm(Q,x) |
|
|
|
|
|
|
( x Aтогда и только тогда, когда на |
x останавливается машина |
P; |
x A |
|||||
тогда |
и только |
тогда, когда на x |
останавливается |
машина |
Q), |
иначе |
||
множество A называется неразрешимым. |
|
|
|
|
|
|||
|
В общих чертах разрешающий алгоритм, выясняющий для |
каждого |
||||||
числа |
x, x N0,принадлежит ли |
x множеству |
A, |
таков. |
Предъявим |
|||
машинам P и Q число x. Через конечное число шагов одна из машин
остановится, так как либо x A, либо |
x A. Если остановится машина P, |
||
то x A; если остановится машина Q, |
то x A. |
|
|
Одним из важнейших результатов теории алгоритмов явилось открытие |
|||
таких неразрешимых множеств, которые одновременно перечислимы. |
|
||
Рассмотрим такие множества. |
|
|
|
Пусть |
H x|Ocm(Mx,x) – множество таких номеров машин |
||
Тьюринга, которые останавливаются на своем номере. Множество |
H |
||
перечислимо. |
Алгоритм, перечисляющий элементы H таков. Пусть |
все |
|
машины Тьюринга начинают работать на своих номерах. Множеству |
H |
||
принадлежат номера x тех машин Тьюринга, которые через конечное число шагов остановятся.
Теорема 2.6.3.
Множество Н неразрешимо.
Заметим, что для доказательства несуществования разрешающего алгоритма для H , достаточно построить хотя бы один контрпример,
30
