Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
my=ps=KSR1=samoilik=13052013.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
744.96 Кб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]