
- •Практикум Теория алгоритмов и сложность вычислений.
- •0 Иначе
- •0 Иначе
- •0 Иначе
- •0 Иначе
- •5. Целая часть от деления аргумента X на y
- •6. Остаток от деления аргумента X на y
- •7. Число различных делителей X (включая число 1)
- •1. Экспонента числа px в числе y
- •2. Квадратичный остаток числа X
- •3. Нумерация пар чисел
1. Экспонента числа px в числе y
exxy
Введем еще одну важную для дальнейшего функцию. Эту функцию мы будем обозначать через ex(x, y) или, сокращенно, exxy и называть экспонентой числа px в числе y. По определению, при y≠0 exxy полагаем равным показателю наивысшей степени простого числа px, на которую делится y. Для y=0 полагаем, по определению exx0=0 для всех значений x. Например,
ex08=3, ex18=0, ex00=0.
Каждое натуральное число n>1 можно однозначно представить в виде произведения
N=pi0a0 pi1a1… pisas (aj>0, i0<i1<…<is)
положительных степеней различных простых чисел. Отсюда в силу определения функции ex получаем
exi0n=a0, … , exisn=as
и exin=0 для всех значений i, отличных от i0, …,is.
Чтобы доказать примитивную рекурсивность функции ex (x,y), мы снова воспользуемся теоремой о мажорируемой неявной функции. По определению, ex (x,y+1) есть наибольшее значение u, для которого pxu есть делитель y+1. Поэтому можно утверждать также, что ex (x,y+1) есть наименьшее значение u, для которого pxu+1 не делит y+1, то есть
ex (x, y+1)=u(unsg rest(y+1, pxu+1)=0) (1)
Функция pxu+1 примитивно рекурсивна и, кроме того,
ex(x,y+1)<=y+1. (2)
В силу упомянутой теоремы о мажорируемых неявных функциях, из (1) и (2) следует, что функция ex(x,y+1), а с нею и ex(x,y) = ex(x,(y÷1)+1) примитивно рекурсивны.
2. Квадратичный остаток числа X
q(x)
Рассмотрим еще функцию
q(x)=x ÷ [√x]2,
где символом [z] обозначается целая часть вещественного числа z, равная наибольшему целому, не превосходящему z. Число q(x) называется квадратичным остатком числа x. Оно равно расстоянию от x до ближайшего слева точного квадрата.
Равенство n=[√x] Равносильно соотношению
n2<=x<(n+1)2,
где n – натуральное. Таким образом,
[√x]=μt(sg((t+1)2 ÷ x)=1)
и вместе с тем [√x] <=x. По теореме о мажорируемой неявной функции отсюда следует, что функция [√x] примитивно рекурсивная. Вместе с нею примитивно рекурсивной является и функция q(x)=x ÷ [√x]2.
3. Нумерация пар чисел
с (x,y)
-
x
0
1
2
3
4
0
1
2
3
(x,y)
4
y
Все пары натуральных чисел можно расположить в простую последовательность и притом многими способами. Для определенности рассмотрим следующее расположение этих пар, которое будем называть канторовским.
(0,0); (0,1), (1,0); (0,2), (1,1), (2,0); (0,3), …
В этой последовательности пары идут в порядке возрастания суммы их членов, а из пар с одинаковой суммой членов ранее идет пара с меньшим первым членом.
Обозначим через с (x,y) номер пары (x,y) в последовательности, причем нумерацию начинаем с нуля.
Т.о. с(0,0)=0, с(0,1)=1, с(1,0)=2 и т.д.
с (x,y) = 1/2 * (x+y)(x+y+1) + x = 1/2 * ((x+y)2+3x+y) = div2((x+y)2+3x+y)
Функция div2 примитивно-рекурсивна, а значит и функция с (x,y) – тоже примитивно рекурсивна.
Контрольная работа №3
Плановое время строго не более 30 минут.
СЕМИНАР 14
Сложность машины Тьюринга для вычисления функции f(n)=2n+3.
Вычисления производятся в так называемом «унарном коде». Натуральные числа представляются палочками: 0-одной палочкой ,1-двумя палочками; 2-тремя и т.д. Значение аргумента n записывается на машинной ленте n+1 палочками после начальной метки ; значение функции f(n)=2n+3 записывается 2n+4 палочками через клетку от значения аргумента. Закончив запись значения функции, машина возвращается в начальную клетку и останавливается. Значения аргумента и функции остаются на ленте.
Машина работает так:
Копирует каждую палочку в значении аргумента дважды, что дает 2n+2 палочек в значении функции .
Прибавляет к ним еще две палочки и возвращается в начальную клетку.
Таблица машины:
-
№
Команды
№
Команды
1
A R A
12
E Я Я L C
2
A 1 X R B
13
F 1 1 L F
3
B 1 T L C
14
F Я Я L F
4
B Я Я R D
15
F T T L F
5
C 1 1 L C
16
F 1 R E
6
C X X R E
17
F I T R E
7
C T 1 R B
18
F X 1 L F
8
D 1 1 R D
19
F S F
9
D Я 1 L F
20
G 1 1 R G
10
E 1 R G
21
G T T R G
11
E T I R G
22
G Я Я R D
При построении машины объединялись внутренние состояния, которые допускали объединение, т.е. не участвовали в противоречащих конфигурациях.
Первый этап состоит из n+1 циклов. Палочка, копируемая в данном цикле, заменяется меткой . В следующем цикле эта метка передвигается вправо.
Первый цикл:
копирование
А 1 1 1 Я, В 1 1 Я, 1 В 1 Я, 1 1 В Я, 1 1 Я С, 1 1 Я 1 D,
1 1 Я E 1 1
возвращение
1 1 Е Я 1 1, 1 Е 1 Я 1 1, 1 1 Я 1 1, 1 1 Я 1 1 .
Второй цикл:
копирование
1 А 1 1 Я 1 1, 1 В 1 Я 1 1, 1 1 В Я 1 1, 1 1 Я С 1 1, 1 1 Я 1 С,
1 1 Я 1 1 С, 1 1 Я 1 1 1 D, 1 1 Я 1 1 Е 1 1;
возвращение
1 1 Я 1 Е 1 1 1, 1 1 Я Е 1 1 1 1, 1 1 Е Я 1 1 1 1, 1 Е 1 Я 1 1 1 1, 1 Е 1 Я 1 1 1 1.
Третий цикл:
копирование
1 1 А 1 Я 1 1 1 1, 1 1 В Я 1 1 1 1, 1 1 Я С 1 1 1 1, 1 1 Я 1 С 1 1 1,
1 1 Я 1 1 С 1 1, 1 1 Я 1 1 1 С 1, 1 1 Я 1 1 1 1 С, 1 1 Я 1 1 1 1 1 D
1 1 Я 1 1 1 1 Е 1 1;
возвращение
1 1 Я 1 1 1 Е 1 1 1, 1 1 Я 1 1 Е 1 1 1 1, 1 1 Я 1 Е 1 1 1 1 1,
1 1 Я Е 1 1 1 1 1 1, 1 1 Е Я 1 1 1 1 1 1, 1 1 Е Я 1 1 1 1 1 1.
Второй этап:
Прибавление двух палочек
1 1 1 А Я 1 1 1 1 1 1, 1 1 1 Я С 1 1 1 1 1 1, 1 1 1 Я 1 С 1 1 1 1 1,
1 1 1 Я 1 1 С 1 1 1 1, 1 1 1 Я 1 1 1 С 1 1 1, 1 1 1 Я 1 1 1 1 С 1 1,
1 1 1 Я 1 1 1 1 1 С 1, 1 1 1 Я 1 1 1 1 1 1 С, 1 1 1 Я 1 1 1 1 1 1 D,
1 1 1 Я 1 1 1 1 1 1 Е 1 1 ;
Возвращение
1 1 1 Я 1 1 1 1 1 Е 1 1 1, 1 1 1 Я 1 1 1 1 Е 1 1 1 1, 1 1 1 Я 1 1 1 Е 1 1 1 1 1,
1 1 1 Я 1 1 Е 1 1 1 1 1 1, 1 1 1 Я 1 Е 1 1 1 1 1 1 1, 1 1 1 Я Е 1 1 1 1 1 1 1 1,
1 1 1 Е Я 1 1 1 1 1 1 1 1, 1 1 Е 1 Я 1 1 1 1 1 1 1 1, 1 Е 1 1 Я 1 1 1 1 1 1 1 1,
Е 1 1 1 Я 1 1 1 1 1 1 1 1, Е 1 1 1 Я 1 1 1 1 1 1 1 1.
Машина вернулась в начальную клетку и остановилась. Первый этап занял 1+11+13+15=40 тактов, второй 10+11=21 такт, вся работа 61 такт.
Точный расчет сложности
Размер задачи - значение аргумента n. Копирование i-n палочки занимает n+1-( i -1)+1+2i+1=n+i+4 единиц времени(тактов), возвращение к ней 2i-1+1+n+1-i=n+i+1, а весь i-n цикл 2n+2i+5. Следовательно, n+1 циклов выполняется за время
2n(n+1)+2i+5(n+1)=3n*n+10n+7,
а весь первый этап-за время 3n*n+10n+8.
Прибавление двух палочек на втором этапе требует 2+2(n+1)+2=2n+6 единиц времени, возвращение в начальную клетку
2(n+1)+1+n+1+1=3n+5.
Следовательно, второй этап выполняется за время 5n+11, а все решение задачи - за время 3n*n+15n+19.
В общем случае задача может иметь много входных слов данного размера. Временная сложность Т(n) машины есть наибольшее время её работы при входных словах размера n. В нашем случае существует только одно входное слово данного размера, поэтому T(n)=3n*n+15n+19.
Пространственная, сложность S(n) машины есть наибольший путь (наибольше число клеток), проходимой ею при входных словах размера n. Нетрудно видеть, что в нашем случае S(n)=1+n+1+1+2(n+1)+2=3n+7. При n=2 получим: Т(2)=61, S(2)=13, в согласии с разобранным примером.
Функции Т(n) и S(n) здесь суть многочлены (полиномы). Следовательно, машина имеет полиномиальную сложность и реализует хороший, быстрый алгоритм. Вычисление функции f(n)=2n+3 – легко разрешимая задача, с точки зрения объема вычислений.
Приближенный расчет сложности
i-ый цикл первого этапа требует O(n) единиц времени, а весь первый этап (n+1)O(n)+1=O(n*n). Второй этап требует О(n) единиц, откуда T(n)=O(n*n)+O(n)=O(n*n ). Ясно также, что S(n)=O(n). Функции T(n) и S(n) суть полиномиальные функции. Задача легко разрешима.
СЕМИНАР 15
Тест №3
Темы, затрагиваемые тестом
-рекурсивные, примитивно-рекурсивные, частично-рекурсивные функции
-непримитивно рекурсивные функции
-рекурсивные и рекурсивно-перечислимые множества
-эффективная перечислимость и распознаваемость рекурсивных, примитивно-рекурсивных, частично-рекурсивных функций
СЕМИНАР 16
ЗАЧЕТ