6.2 Нумерация программ
Теорема 6.2 Все программы на языке МНР можно эффективно перенумеровать, то есть каждой программе соответствует некоторый номер так, что разным программам соответствуют разные номера, и в то же время каждому натуральному числу будет соответствовать некоторая программа.
Доказательство. Сначала научимся нумеровать команды МНР.
Тип команды | Номер, присваиваемый данной команде |
Z(n) | 4n-3 |
S(n) | 4n-2 |
T(m,n) | 4π(m,n)-1 |
J(m,n,q) | 4π(m,π(n,q)) |
Где π – некоторая специальная функция, нумерующая пары натуральных чисел. В качестве примера такой функции приведем π(m,n)=2m-1(2n-1).
Заметим, что функция π – хорошая. То есть разным парам соответствуют разные числа и каждому числу соответствует некоторая пара. Кроме того, обе функции – прямая (π) и обратная (π-1) эффективно вычислимы. Покажем это:
π(3,4) = 22(2∙4-1)=4∙7=28
π-1(28)=22
° - ставим 2, так как это максимальная степень двойки, на которую делится 28
π-1(54)= π-1(2∙27)= π-1(2(2∙14-1))=(2,14)
π-1(100)=(3,13)
Рассмотрим примеры кодировки команд:
Т(3,2)→4π(3,2)-1=22(2∙2-1)=4∙48-1=191
J(2,1,3)4π(2,π(1,3))=4π(2,5)=4∙29=72.
Построенная нами нумерация хорошая, так как:
во-первых, разным командам соответствуют разные числа,
во-вторых, каждому натуральному числу соответствует некоторая команда,
в-третьих, нумерация и в ту и в другую сторону эффективно вычисляема, то есть по команде нетрудно вычислить число, ей соответствующие, и так же по числу определяемому командой.
Пример.
Определить команду имеющую код 247.
Определяем остаток от деления на 4: 247 div 4=3
Так как получено 3, значит мы, при вычислении номера команды, вычитали1, следовательно, мы переводили в число команду Т.
Восстанавливаем обратно: 247+1=248=4∙62
Π(k,l)=62
k=2
l=16
Результат: Т(2,16).
Определить команду. Имеющую код 264.
264 div 4 = 0
J(m,n,q)=4π(m,π(n,q))
264=4∙66
66=π(m,π(n,q))
m=2
n=2
q=9
Результат: J(2,2,9).
Теперь осталось научиться нумеровать программы. Программа есть конечная последовательность команд. Каждой команде поставим в соответствие ее номер по описанному выше алгоритму. После этого надо научиться нумеровать все возможные конечные последовательности натуральных чисел.
Делаем это следующим способом.
Рассмотрим функцию φ, которая переводит в набор из k натуральных чисел в натуральное число по следующей формуле:
φ(n1,n2..nk) =
Если число φ(n1,n2..nk) записать в двоичной записи, то оно может, у примеру выглядеть так:
Φ(1,2,3)=20+22+25=100101
Φ-1(13)=(1,2,1) так как 13 1101
Таким образом, функция φ – хорошая, так как:
Разные наборы переходят в разные числа;
Каждому натуральному числу соответствует набор чисел, который в него приходит;
Функции φ и φ-1 эффективно вычислимы.
Таким образом мы научились нумеровать все программы на языке МНР и доказали Теорему 6.2
Теорема доказана.
- Основные понятия. Справочный материал
- Основные понятия
- 1.2. Справочный материал. Сравнение скорости роста основных функций
- 2 Новые быстрые версии старых алгоритмов
- 2.1. Сортировки массивов
- 2.1.1 Метод прямого выбора (SelectSort)
- 2.1.2 Быстрая сортировка методом двоичных вставок (MergeSort)
- 2.2. Преобразование Фурье (бпф)
- 2.2.1. Дискретное преобразование Фурье
- 2.2.2. Полубыстрое преобразование Фурье (ппф)
- 2.2.3. Быстрое преобразование Фурье (бпф)
- 2.3. Быстрая свертка
- 2.3.1. Понятие свертки
- 2.3.2. Обычный и быстрый алгоритм свертки
- 2.4. Быстрое умножение
- 2.4.1. Быстрое умножение чисел
- 1 Суммирование
- 4 Произведения чисел вдвое меньшей
- 2.4.2. Быстрое умножение матриц
- 2.4.3. Очень быстрое умножение числе (алгоритм Шенхаге – Штрассена)
- 3. Задачи на графах
- 3.1. Справочный материал
- 3.2. Поиск минимального остова в связном неориентированном взвешенном графе
- 3.3. Нахождение кратчайшего расстояния
- 3.3.1. Алгоритм Форда – Беллмана
- 3.3.2. Алгоритм Дейкстры
- 3.4. Нахождение диаметра, радиуса и центра графа
- 3.5. Задача об изоморфизме графов
- 3.6. Задача коммивояжера. Её решение методом ветвей и границ.
- Задачи динамического программирования
- Задачи динамического программирования. Её решение методом динамического программирования.
- 4.2. Задача об оптимальном наборе самолетом скорости и высоты
- 4.3. Задача грабителя (задача о рюкзаке)
- 4.4. Задача о перемножении матриц
- 5 Классы p и np
- 5.1 Машина Тьюринга
- 5.2 Недетерменированные машины Тьюринга(ндмт)
- 5.3 Сводимость. Np-полнота.
- 5.4 Иерархия по сложности. Труднорешаемые задачи.
- Классы сложности.
- 6 Неразрешимые задачи
- 6.1 Новая модель алгоритма вычислений.
- 6.2 Нумерация программ
- 6.3 Неразрешимые проблемы
- 6.4 Теорема об ускорении
- Лабораторные работы
- Расчетно-графическое задание
- Ответы к домашним заданиям