- •Содержание курса “Теория алгоритмов и вычислительных процессов”
- •I. Теория алгоритмов
- •Основные понятия теории алгоритмов
- •1.1. Предварительные сведения
- •1.2. Основные требования к алгоритмам
- •1.3. Необходимость математического понятия алгоритма
- •2. Типы алгоритмов
- •3. Способы представления (описания) алгоритмов
- •3.1. Исполнитель алгоритма
- •3.2. Строчная словесная запись алгоритма
- •3.3. Графическая форма записи
- •3.4. Управляющие структуры
- •4. Описание задачи и выбор алгоритма
- •5. Универсальные алгоритмические модели
- •Понятие конструктивного объекта
- •Понятие об алфавитных алгоритмах
- •5.3. Формализация понятия “алгоритм”
- •5.4. Схема построения алгоритмической системы
- •6. Рекурсивные функции
- •6.1. Примитивно-рекурсивные функции
- •6.1.1. Оператор суперпозиции (подстановки)
- •6.1.2. Оператор примитивной рекурсии
- •6.2. Частично-рекурсивные функции
- •Пример 6.2.2. Рассмотрим функцию
- •6.3. Тезис Черча
- •7. Машины Тьюринга (Поста)
- •7.1. Основные понятия машин Тьюринга
- •7.2. Способы представления машины Тьюринга
- •7.2.1. Представление машины Тьюринга совокупностью команд
- •7.2.2. Представление машины Тьюринга графом
- •7.2.3. Представление машины Тьюринга таблицей соответствия
- •7.3. Примеры построения машин Тьюринга
- •Вычислимость по Тьюрингу
- •7.5. Некоторые операции над машиной Тьюринга
- •7.5.1. Композиция машин Тьюринга
- •7.5.2. Итерация машины Тьюринга
- •7.5.3. Разветвление машин Тьюринга
- •7.4. Универсальная машина Тьюринга
- •7.5. Тезис Тьюринга
- •7.6. Машина Поста
- •9. Алгоритмическая разрешимость. Алгоритмические проблемы
- •10. Сложность алгоритмов и вычислений
- •Анализ скорости выполнения алгоритмов
- •Память или время
- •Временнáя сложность алгоритма
- •Оценка с точностью до порядка
- •Определение сложности
- •Сложность рекурсивных алгоритмов
- •Средний и наихудший случай
- •Общие функции оценки сложности
- •Скорость работы алгоритма в реальных условиях
- •19.5. Труднорешаемые задачи
Вычислимость по Тьюрингу
Для алгоритмических проблем часто возникает ситуация, когда надо найти алгоритм для решения задачи, в условие которой входят значения некоторой конечной системы целочисленных параметров, и ожидаемый результат тоже есть целым числом.
Напомним, что числовая функция y=f(x1, x2, ... , xn) называется вычислимой, если существует алгоритм, с помощью которого можно вычислить значение функции для любого набора значений аргументов из области определения функции.
Заметим, что в данном определении понятие алгоритма используется в интуитивном понимании, а потому и понятие вычислимой функции есть интуитивным. Но при этом оказывается, что совокупность вычислимых функций описывается легче, чем совокупность алгоритмов.
Возникает вопрос о функциях, для которых существует МТ, что их вычисляет. Аргумент появляется на ленте до начала вычисления, а значения функции для этого аргумента – те, которые остается на ленте, когда вычисление закончено. Воспользуемся специальным кодированием натуральных чисел в алфавите, который состоит из одного символа – 1: каждое натуральное число n подается (n+1) символом 1, т.е. числа 0,1,2,3,… кодируем словами 1, 11,111, и т.д. При построении машины Тьюринга для вычисления значений числовых функций будем произвольное число х N обозначать словом 1111..1=1х.
Для записи вектора (x1,x2,…,xn) будем использовать обозначение 1x11x2…1xn или 1x1+1#1x2+1…#1xn+1, или 1x1+1*1x2+1…*1xn+1.
Определение 7.2.1. Частичная числовая n-местная функция f(x1,…,xn ) называется вычислимой по Тьюрингу, если существует машина М, которая вычисляет ее таким образом:
1. Если набор значений аргументов (x1,…,xn ) принадлежит области определения функции f, то машина М, начинающая работу в конфигурации
q0(1x1+1 * 1x2+1…* 1xn+1) , (1)
где q0 – начальное положение, в котором головка МТ рассматривает крайний левый символ, останавливается, окончивши работу в конфигурации
qz(1y+1), где y = f(x1,…,xn ).
2. Если набор значений аргументов (x1,…,xn ) не принадлежит области определения функции f, или таких, что значения функции не принадлежат N, то машина М, начинающая работу в конфигурации (1), работает бесконечно долго, т.е. не переходит в заключительное положение.
Примеры 7.2.1.
Рассмотрим базовую функцию следования (или добавления единицы S(x) = x+1). Для этого построим МТ с внешним алфавитом {#,1}, двумя внутренними состояниями {q0,qz} и программою:
q0 1 q0 1 R, q0 # qz 1 E (здесь Е вместо 0 или пусто).
Вычисление базовой функции тождественности I(x) = x. МТ из внешним алфавитом {#,1} и внутренним {q0,qz} алфавитом вычисляет функцию I(x) = x с помощью программы:
q0 1 q0 1 R, q0 # qz # E
МТ из внешним алфавитом {#,1} и внутренним {q0,qz} алфавитом вычисляет функцию O(x) = 0 с помощью программы:
q0 1 q0 # R, q0 # qz 1 E
Для вычисления функции I nm (x1,x2,…,xn) = xm начальная конфигурация
11..11*11..11…*11..11…*11..11 (x1+1,x2+1,…,xm+1,…,xn+1 раз соответственно). Это может выполнить машина, которая стирает все знаки 1 и *, при этом “считает” до m и оставляет m-ю группу без изменения, и снова до конца стирает все знаки 1 и *. Ясно, что это может выполнить подходящая МТ.
МТ из внешним алфавитом {#,1}, внутренним {q0,qz} алфавитом и системой команд: q0 1 q0 1 R, q0 # q0 1 R
с любой начальной конфигурацией будет работать бесконечно долго, заполняя единичками всю ленту справа от начальной точки.
6. Если машина М переводит конфигурацию α1q1α2 в конфигурацию β1q2β2, то обозначим это как М(α1α2) = β1β2. Запись М(α) будем употреблять также в другом значении: как обозначения машины М с начальным значением α .
Удвоение (перезапись) слова, то есть переработка слова α в алфавите {1}. Для чисел эту задачу решает машина М с системой команд в таб. 7.3.
Таб. 7.3.
-
X/Q
q0
q1
q2
q3
1
0 Rq1
1Rq1
1Rq2
1Lq3
#
# Rqz
* Rq2
1Lq3
*
* Lq0
* Rq2
* Lq3
0
1Lq0
0Rq0
Машина М при каждом проходе начального числа 1 заменяет левую с его единиц нулем и заносит (в состоянии q3) одну единицу по правую сторону от 1 в ближайшую пустую ячейку. Когда все единицы начального числа вычерпаны, каретка возвращается в начальное состояние, заменяя все нули единицами.
7. Сконструируем МТ для определения суммы чисел, заданных не в унарном коде, а разных системах счисления. Например, найдем сумму числа, заданного в восьмеричной и троичной системах счисления, где X={0,1,2,3,4,5,6,7,+,#} внешний алфавит МТ, а Q={q1,q2,q3,q4,q5} – внутренний. Пусть слагаемые соединены знаком +, по левую сторону от знака + размещено слагаемое в восьмеричном коде, а по правую сторону - слагаемое в троичном коде. Идея решения задачи такая: от числа, расположенного по правую сторону, отнимаем единицу (действуя по правилам троичной арифметики), потом перемещаемся в левую сторону и к восьмеричному числу прибавляем единицу, действуя по правилам восьмеричной арифметики. После этого возвращаемся к правому числу и повторяем все операции до тех пор, пока правое слагаемое не будет исчерпано. Наконец, последний раз сдвигаемся в правую сторону, стираем знак + и останавливаемся.
Таб. 7.4.
-
X/Q
q1
q2
q3
q4
q5
0
2Lq1
L
1Rq4
R
1
0Lq2
L
2Rq4
R
2
1Lq2
L
3Rq4
R
#Rq5
3
4Rq4
R
4
5Rq4
R
5
6Rq4
R
6
7Rq4
R
7
0Lq3
R
+
#Rq5
Lq3
R
#
1Rq4
Lq1
qz
8. В таб. 7.5. приведена машина Тьюринга, подсчитывающая количество единиц, записанных в ячейках подряд без пропусков в алфавите Х = {1}, в десятичной системе счисления. Для решения задачи расширим алфавит Х' = {1,2,3,4,5,6,7,8,9,0,+}
Таб.7.5.
-
X/Q
q0
q1
q2
q3
q4
q5
q6
0
1Rq6
0Rq6
1
+Lq5
1Rq2
1Rq2
#Lq4
1Lq4
2Rq6
1Rq6
2
3Rq6
2Rq6
3
4Rq6
3Rq6
4
5Rq6
4Rq6
5
6Rq6
5Rq6
6
7Rq6
6Rq6
7
8Rq6
7Rq6
8
9Rq6
8Rq6
9
0Lq5
9Rq6
+
#qz
+Lq5
+Rq1
#
q1L
#q3L
1Rq6
0Rq6
Более оптимальный алгоритм приведен в таблице 7.6.
Таб.7.6.
-
X/Q
q0
q1
q2
q3
0
1q2
R
L
1
+Lq1
2q2
R
L
2
3q2
R
L
3
4q2
R
L
4
5q2
R
L
5
6q2
R
L
6
7q2
R
L
7
8q2
R
L
8
9q2
R
L
9
0q1L
R
L
+
+R
L
+q0
#L
#
#Lq3
1q2
qzR
9. В таб. 7.7. приведена машина Тьюринга, которая переводит число из десятичной системы счисления в двоичную систему счисления. Для решения задачи расширим алфавит Х' = {1,2,3,4,5,6,7,8,9,0,+}
Таб. 7.7.
-
X/Q
q0
q1
q2
q3
q4
q5
q6
0
+q1R
R
9q2L
L
1q1
L
+q1R
1
L
R
0q3
L
0L
L
q1
2
L
R
1q3
L
q1
3
L
R
2q3
L
q1
4
L
R
3q3
L
q1
5
L
R
4q3
L
q1
6
L
R
5q3
L
q1
7
L
R
6q3
L
q1
8
L
R
7q3
L
q1
9
L
R
8q3
L
q1
+
q6R
q5
q4L
L
#L
+R
#
+q1R
q2L
1q1
qZR
q5L
