Вы находитесь на странице: 1из 6

Министерство науки и высшего образования Российской Федерации

ФГБОУ ВО «Ивановский государственный химико-технологический университет»

Кафедра информационных технологий и цифровой экономики

Реферат
по дисциплине «Математическая логика и теория алгоритмов»
Вариант 7
«Машины Шёнхаге»

Выполнила: студентка группы 1/42 Завидина Екатерина Андреевна

Проверила: к.э.н., доцент кафедры ИТиЦЭ Ксенофонтова Ольга Леонидовна

Иваново 2021
Содержание

§ 1. Описание вычислительной модели (машины Шёнхаге) 3

§ 2. Алгоритм быстрого битового умножения целых чисел 4

§ 3. Алгоритм Шёнхаге — Штрассена для умножения целых чисел 5

§ 4 Леммы 5

Список использованной литературы 6

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 битов в каждом. Таким образом,

Произведение представимо в виде

где

Произведение можно вычислить с помощью теоремы о свертке. Перемножение


преобразований Фурье требует 2b умножений. Применяя обернутую свертку, можно
уменьшить число умножений до b. Именно по этой причине мы вычисляем u*v по
модулю 2n +1

Так как bl = n, то 2b∗l ≡−1. Отсюда находим, что

Так как произведение двух 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’
по формуле

учитывая, что wi лежит между —(b-1-i) 22 lи (i+1)22 l . Вычисление wi по wi’ и wi”


требует O(l+log b) шагов для каждого wi, что дает в целом O(b*l + b*log b), или O(n)
шагов.

§ 3 Алгоритм Шёнхаге — Штрассена для умножения целых чисел


Вход. Два n -разрядных двоичных целых числа u и v, где n= 2k
Выход. (n+1) - разрядное произведение u*v по модулю
Метод. Если n мало, умножьте u на v по модулю 2n+ 1 вашим любимым алгоритмом.
Для большего n положим b =2k /2 , если k четно, и b = 2(k−1 )/ 2, если k нечетно.
1. Вычисляем преобразование Фурье по модулю векторов

2. Вычисляем по модулю22 l+1 покомпонентное произведение преобразований Фурье,


полученных на шаге 1.
3. Вычисляем обратное преобразование Фурье по модулю 22 l+1 вектора, равного
покомпонентному произведению, полученному на шаге 2.
4. Вычисляем wi’ = wi
5. Вычисляем точные значения wi по формуле

учитывая, что wi лежит между –(b-1-i)22 l и (i+1)22 l.


b −1
6. Вычисляем ∑ wi 2 по модулю (2n +1 ¿. Это и есть искомый результат.
il

l=0

Теорема. Алгоритм Шёнханге вычисляет по модулю (2n +1 ¿.


Теорема. Алгоритм Шёнханге тратит Об( n log n log log n) времени.

§ 4 Леммы
Лемма1. Временная сложность алгоритма двоичного деления для вычисления
σt на машине Шёнхаге ограничена сверху O(M(m) log(m)); емкостная сложность –
ограничена сверху O(m), где m находится по формуле.
Лемма2. Временная сложность алгоритма двоичного деления для вычисления

5
τt на машине Шёнхаге ограничена сверху O(M(m) log(m)); емкостная сложность –
ограничена сверху O(m), где m определяется по формуле.

Список использованной литературы


1. ЭФФЕКТИВНОЕ ПО ВРЕМЕНИ И ПАМЯТИ
ВЫЧИСЛЕНИЕЛОГАРИФМИЧЕСКОЙ ФУНКЦИИ ВЕЩЕСТВЕННОГО
АРГУМЕНТАНА МАШИНЕ ШЁНХАГЕС. В. Яхонтов
http://journals.tsu.ru/uploads/import/906/files/20-101.pdf
2. https://scask.ru/e_book_cla.php?id=63

Вам также может понравиться