Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Реферат
по дисциплине «Математическая логика и теория алгоритмов»
Вариант 7
«Машины Шёнхаге»
Иваново 2021
Содержание
§ 4 Леммы 5
2
§ 1 Описание вычислительной модели (машины Шёнхаге)
Данная машина оперирует символами из алфавита Σ ={0,1,...,2λ−1} и с
последовательностями таких символов, где λ некоторая константа. Машина состоит из
одномерныхмассивовT0,...,Tτ для чтения и записи символов из Σ, регистров A,B,C,M
для арифметических операций над символами (которые интерпретируются в данном
случае как натуральные числа) и управляющего устройства CPU. Массивы
потенциально бесконечны в обе стороны; для каждого массива есть указатель pi на
текущий символ, записанный в массиве. Запись〈p + j〉означает символ, на который
ссылается указатель p + j. Есть также дополнительный регистр Y - указатель на
текущую выполняемую инструкцию, и дополнительный массив S, потенциально
бесконечный в одну сторону, который служит в качестве стека рекурсивных вызовов.
Битовый регистр E служит как регистр переполнения при арифметических операциях.
Программа для машины Шёнхаге состоит из нескольких модулей-процедур на языке
TPAL, который аналогичен языку ассемблера для RISC-процессоров. В TPAL имеются
команды загрузки в регистр символа, записанного в массиве, чтения из регистра и
запись в массив, арифметические операции, команды увеличения/уменьшения
содержимого регистров, команды сдвига, вызов и возврат из процедуры, переход
пометке и условный переход. Целые числа, которыми оперирует машина, кодируются
как последовательности символов в алфавите Σ:
a=a0+a12λ+a2(2 λ)^2+...+ak−1(2 λ)^(k-1), 0 <= ai <= 2 λ−1.
Бит знака размещается в символе, следующем за старшим символом ak−1.
При вызове процедур параметры записываются в массивах, локальные переменные
процедур и возвращаемые значения также в массивах. При возврате из процедуры
память, занятая под параметры и локальные переменные, освобождается.
Временная вычислительная сложность алгоритма на машине Шёнхаге определяется
как количество выполняемых на ней инструкций на языке TPAL. При этом затраты на
арифметические операции над символами и на вызов процедуры учитываются как
некоторое константное число шагов. Память, используемую программой при
вычислении в массиве, определим как максимум из количества битов по всем
участвующим в вычислениях элементам массива.
Поскольку конструктивные функции это функции, вычисляющие приближения своих
значений по приближениям аргумента, определим оракульную машину Шёнхаге.
Данная машина имеет оракульную функцию, которая вычисляет приближения
аргумента; по таким приближениям машина вычисляет приближения функции.
Условимся, что запрос к оракулу в виде записи точности вычисления записывается в
масси-веT0, в котором также дается приближение аргумента. При оценке временной
вычислительной сложности на оракульной машине Шёнхаге запрос к оракулу
учитывается как одна операция.
Определение. Емкостную вычислительную сложность алгоритма при расчёте на
оракульной машине Шёнхаге определим как сумму длин используемой памяти по всем
массивам, сложенную с максимумом объема памяти, занятой стеком.
Машина Шёнхаге может рассматриваться как паскалевидная функция с теми же
верхними оценками сложности.
3
§ 2 Алгоритм быстрого битового умножения целых чисел
Теперь изучим важное приложение теоремы о свертке — алгоритм быстрого битового
умножения целых чисел. Этот метод можно обобщить, разбивая числа на b блоков по l
разрядов в каждом. Если рассматривать эти b блоков как коэффициенты полинома,
получатся выражения, аналогичные тем.
Пусть u v - двоичные целые числа между 0 и 2n ,которые надо перемножить по
модулю 2n +1 . Заметим, что двоичное представление числа 2n
занимает n+1 разрядов. Если число u или v равно 2n ,то оно представляется
специальным символом —1, и в этом особом случае умножение выполняется легко:
если u=2n ,то u*v по модулю 2n +1 получается путем вычисления 2n +1-v
по модулю 2n +1.
k−1
Допустим, что n = 2k и положим b = 2k /2 ,если k четно, и b = 2 2 в противном случае.
Пусть l=n/b. Заметим, что и l>=b и l делится на b без остатка. Первый шаг состоит в
разбиении u и v на b блоков по l битов в каждом. Таким образом,
где
Так как произведение двух l-разрядных двоичных чисел меньше 22 l ,и yi и yb+I - это
суммы, составленные из i+1 и b-(i+1) таких произведений соответственно, то wi = yi-
yb+i удовлетворяет неравенствам –(b-1-i)22 l <wi<(i+l) 22 l. Следовательно, wi может
принимать не более b22 lзначений. Если мы сможем вычислить все по модулю 22 l, то
сможем вычислить u*v по модулю 2n +1, сделав дополнительных шагов для сложения
экземпляров с необходимыми сдвигами.
Чтобы вычислить все wi по модулю b22 l, вычисляем эти wi дважды — по модулю b и
по модулю 22 l+1. Пусть wi’ - это wi по модулю 22 l+1 .Так как b - степень числа 2, а
4
число 22 l+1 нечетно, то b и 22 l+1 взаимно просты. Поэтому wi можно получить из wi’
по формуле
l=0
§ 4 Леммы
Лемма1. Временная сложность алгоритма двоичного деления для вычисления
σt на машине Шёнхаге ограничена сверху O(M(m) log(m)); емкостная сложность –
ограничена сверху O(m), где m находится по формуле.
Лемма2. Временная сложность алгоритма двоичного деления для вычисления
5
τt на машине Шёнхаге ограничена сверху O(M(m) log(m)); емкостная сложность –
ограничена сверху O(m), где m определяется по формуле.