- •§ 8. Диафантовы множества.
- •Теорема Лагранжа.
- •8.1. Разрешимость в натуральных числах.
- •Определение.
- •Определение.
- •Теорема 8.1.
- •Теорема 8.2.
- •Необходимость.
- •Достаточность.
- •8.2. Нумерация кортежей.
- •Канторова нумерация.
- •Геделево кодирование.
- •Определение.
- •Теорема 8.3.
- •Теорема 8.4.
- •Определение.
- •0.2. Машина с неограниченными регистрами (мнр) [Ктл, c.16]
- •0.3. Равнодоступные адресные машины (рам) [Ахо, с.22]
- •Типы операндов.
- •Команды.
- •0.4. Интерпретация программы как функции.
- •0.6. Вычислительная сложность рам-программ.
- •Определение.
- •Определение.
- •Определение.
- •Логарифмический критерий.
- •0.7. Модификации рам.
- •0.8. Неветвящиеся программы и равномерный весовой критерий.
- •Определение.
- •0.9. Неветвящиеся программы и логарифмический весовой критерий.
- •0.10. Ветвления.
- •0.11. Операции с двоичными векторами фиксированной длины. Определение.
- •Определение.
- •0.12. Машина Тьюринга (k-ленточная).
- •Определение.
- •Определение.
- •0.13. Связь мт и рам.
- •Теорема 0.1.
- •Утверждение 1.
- •Утверждение 2.
- •§ 1. Структуры данных. Определение.
- •1) Вставка.
- •2) Удаление.
- •1.1. Очередь и стек. Определение.
- •Определение.
- •1.2. Множества. Представление множеств.
- •1) Применение списков.
- •3) Представление в виде массивов.
- •4) Представление в виде графа.
- •Определение.
- •Определение.
- •§ 2. “Разделяй и властвуй”.
- •Теорема 2.1
- •§ 3. Динамическое программирование
- •Алгоритм 3.1.
- •§ 4. Редактирующее расстояние
- •Алгоритм 4.1.
- •Алгоритм 4.2.
- •§ 5. Порядковые статистики Определение.
- •Алгоритм 5.1
- •Теорема 5.2.
- •§ 6. Вхождение образца
- •Определение.
- •Алгоритм 6.1a.
- •Алгоритм 6.1б. Вычисление функции отказов.
- •Теорема 6.2.
- •Алгоритм 6.1.Б вычисляет f за o(n) шагов.
- •Конец пока
- •Алгоритм lz
- •Дельта – алгоритм
- •Арифметическое кодирование
Определение.
Логарифмическая емкостная сложность РАМ- программы - это сумма по всем работавшим регистрам, включая сумматор, величин l(xi), где xi - наибольшее по абсолютной величине целое
число, содержавшееся в i-ом регистре за все время вычислений.
Пример.
Рассмотрим программу, считающую nn:
begin
read x
...
y=1
for (i=1...x) y=y*x // умножение выполняется n раз
write y
end
При равномерном весовом критерии каждая команда MULT требует одну единицу времени, поэтому на выполнение всех команд MULT тратится время O(n). При логарифмическом весовом критерии i-ая команда занимает l(ni) + l(n) (i+1) log n, так что время выполнения всех команд MULT равно
Емкостная сложность определяется числами, которые хранились в регистрах от 0 до 3. При равномерном весовом критерии емкостная сложность составляет O(1), а при логарифмическом - O(n log n),поскольку наибольшее целое число среди содержавшихся в этих регистрах есть n, а
l(n) n log n. Таким образом. сложности для программы из примера таковы:
Логарифмический критерий.
Рассмотрим i-ую команду:
l(ni) i l(n) пусть
( Для любого существует схема со стоимостью (1+) ).
Пример.
Более эффективный алгоритм для xy:
1) read x, y ; z=1 ;
while (y0)
if (even(y)) //если четно
begin y/=2 ; x=x*x; end; // ? какая сложность
else
begin y-- ; z= z*x; end;
write z ;
2) более простой алгоритм :
while (y0)
begin
if (odd(y)) begin z= z*x ; y--; end;
y=y/2 ;
x=x*x ;
end;
(y) - инвариант цикла ; =(z*xy = ab)
в начале z=1 ; x=a ; y=b (сохранение инварианта)
в начале: 1* ab= ab ;
в конце z =ab ; y=0 ; ab = ab ;
На каждом шаге вариант должен быть постоянен.
z* xy = ab if (even(y)), т.е. y=2k , тогда z*(x*x)y/2 = ab
if (odd(y)), т.е. y=2k+1, тогда (z*x)*xy-1=ab
0.7. Модификации рам.
РАМ более сложная модель вычислений, чем это часто бывает необходимо. Поэтому введем ряд других моделей, которые наследуют одни черты РАМ и игнорируют другие. Причем, суммарный вес игнорируемых команд не превосходит некоторой фиксированной доли веса любого эффективного алгоритма для задач, к которым данная модель применяется.
0.8. Неветвящиеся программы и равномерный весовой критерий.
Пример.
Схема Горнера вычисления полиномов .
p(x)=anxn+ an-1xn-1+...+ a1x+a0
Входными переменными служат коэффициенты a0 , a1,...an и неопределенная переменная x.
Выходной переменной будет p.
По правилу Горнера p(x) вычисляется так:
1) a1x+a0 для n=1
2) (a2 x +a1) x +a0 для n=2
3) (a3 x+a2)x+a1)x+a0 для n=3
Ниже приведена неветвящаяся программа, соответствующая этим выражениям.
Для каждого n есть неветвящаяся программа из 2n шагов, вычисляющая полином n-й степени. Для вычисления произвольного полинома n-й степени по его коэффициентам требуется n умножений и n сложений. Циклы допускаются, но это циклы [1, ..., k], которые можно представить копированием строки k раз. Таким образом, если в качестве модели брать неветвящиеся программы, правило Горнера оптимально.
