
- •Оглавление
- •1 Интуитивное понятие алгоритма. Необходимость его уточнения. 7
- •1.4 Вычислительные алгоритмы 16
- •1.1 Свойства, характерные для интуитивного понятия алгоритма
- •1.2 История развития понятия алгоритма
- •1.3 Алгоритмические модели и их представление
- •1.4 Вычислительные алгоритмы
- •1.5 Алгоритмы для исполнителей
- •1.6 Символьные алгоритмы
- •2 Машины тьюринга (одноленточные детерминированные)
- •2.1 Неформальное описание машины Тьюринга
- •2.2 Формальное определение машины Тьюринга
- •2.3 Операции над машинами Тьюринга
- •2.4 Варианты машины Тьюринга
- •2.5 Вычислимость по Тьюрингу и разрешимость
- •3 Проблема самоприменимости
- •3.1. Нумерация алгоритмов
- •3.2 Нумерация наборов чисел
- •3.3 Нумерация слов и словарные функции
- •3.4 Нумерация машин Тьюринга
- •Заключение
- •Список использованных источников
- •Контрольные вопросы
- •Глоссарий
- •Если аргумент и значения принадлежат к натуральным числам
3.1. Нумерация алгоритмов
Нумерация алгоритмов играет важную роль в их исследовании и анализе. Поскольку любой алгоритм можно задать в виде конечного слова (представить в виде конечной последовательности символов некоторого алфавита), а множество всех конечных слов в конечном алфавите счётное, то множество всех алгоритмов также счётное. Это означает существование взаимно однозначного отображения между множеством натуральных чисел и множеством алгоритмов, то есть возможность присвоить каждому алгоритму номер.
Нумерация алгоритмов является одновременно и нумерацией всех алгоритмически исчисляемых функций, причем любая функция может иметь бесконечное количество номеров.
Существование нумерации позволяет работать с алгоритмами так же, как с числами. Особенно полезна нумерация в исследовании алгоритмов, работающих с другими алгоритмами.
Пусть имеется некая массовая проблема с множеством исходных объектов X и множеством искомых объектов Y. Для существования решения массовой проблемы необходимо, чтобы элементы множеств X и Y были конструктивными объектами. Следовательно, элементы этих множеств можно занумеровать натуральными числам. Пусть x∈ X – некий исходный объект, обозначим через n(x) его номер. Если в массовой проблеме по исходному объекту x требуется получить искомый объект y∈Y с номером n(y), то определим арифметическую функцию f: Nn→N, такую что f(n(x))=n(y).
В качестве примера построения арифметических функций по массовым проблемам рассмотрим массовые проблемы.
1. Если дан массив [x1, x2, …, xn] натуральных чисел, то ему в соответствие можно поставить натуральное число 2x1, 3x2,... p(n)xn , где p(n) – n-е простое число. Рассмотрим для примера массив длины 5:
[x1, x2, x3, x4, x5] 2x13x25x37x411x5.
Данная нумерация определяет арифметическую функцию f (например, f(73500) = f(22315372110) = 20315272113 = 4891425).
2. Любое рациональное число имеет некоторый натуральный номер. Нумерация множества искомых объектов проблемы тривиальна:
{«да», «нет»} a {1, 0}. Для данной массовой проблемы можно построить арифметическую функцию одного аргумента, воспользовавшись приемом из предыдущего примера, а можно рассмотреть функцию трех аргументов (три номера элементов исходной тройки).
3. Нумерация текстов программ может быть осуществлена следующим образом: любую программу можно воспринимать как запись числа в 256-ричной системе счисления (если для записи программы использовались символы таблицы ASCII).
Переход от массовой проблемы к арифметической функции позволяет свести вопрос о существовании решения массовой проблемы к вопросу существования эффективного способа вычислений значений арифметической функции по ее аргументу (аргументам).
3.2 Нумерация наборов чисел
В теории алгоритмов получил распространение прием, позволяющий сводить изучение функций от нескольких переменных к изучению функций одной переменной. Он основан на нумерации наборов чисел так, что имеется биективное соответствие между наборами чисел и их номерами, причем функции, определяющие по набору чисел его номер и по номеру сам набор чисел являются общерекурсивными. Например, для функции, содержащей две независимых переменных (x, y), это отображение h(x, y) может быть таким:
Рисунок 1.
Пусть пары (x, y) формируют частично упорядоченное множество N(2). Если дано h(x, y) = n, то существует обратное отображение: x = h-11(n) и y= h-12 (n), т. е. h(h-11 (n), h-12 (n) ) = n. Это позволяет вычислять номер n для любой пары (x, y) и, наоборот, по номеру n вычислять значения x и y:
Используя эти правила, можно вычислять нумерацию троек h2(x, y, z) = h(h(x, y), z) = n и, наоборот, по номеру тройки - значения x, y, z. Например, если h2 (x, y, z) = n, то z= h-12(n), y= h-12 (h-11 (n)), x= h-11 (h-11 (n)), h2(x, y, z) = h(h(h-11 (h-11 (n)), h-12 (h-11 (n))), h-12 (n)). Тройки (x, y, z) формируют частично упорядоченное множество N(3). Аналогично для произвольного количества чисел имеем:
hn-1(x1, x2,…, xn)=h(h…h(h(x1, x2), x3)…xn-1), xn). Если hn-1(x1, x2,…, xn)=m, то xn= h-12 (m), xn-1 =h-12 (h-11 (m)), ....................................., x2= h-12 (h-11 (...h-11 (m)...)), x1= h-12 (h (...h (m)...)).
Имея
нумерацию множеств наборов N(1),
N(2),...,
N
(i),...,
N(n,
где N
(i)
– множество наборов (i) чисел, можно
установить объединенную нумерацию
произвольных наборов чисел M = N(1)
N(2)
...
N
(i)
..
N(n),
где M
N.
Для любого n
N
имеем h(x1,x2,..., xn
)=
h(hn−1(x1,x2,...,
xn
), n −1).
Если h(x ,1x ,2..., x )n= m, то hn−1(x ,1x ,2..., x )n= h-11 (m), n= h-12 (m)+1. Используя вышеприведенные формулы, можно восстановить значения x1, x2,…, xn.