Ответы:
Используя быстрое преобразование Фурье, умножения на битные числа можно выполнить за время (где тильда означает, что мы игнорируем полилогарифмические факторы). Повторяя возведение в квадрат, мы можем вычислить с умножением , и каждое умножение включает в себя не большее число, чем , которое имеет примерно битов. Таким образом, общее количество требуемого времени равно .˜ O ( k ) O ( журнал п ) п п 2 п 2 лог 2 п ~ О ( п 2 ( лог - п ) 2 ) = ~ O ( п 2 )
Отредактировано в ответ на комментарии . Время для вычисления может быть разложено на время, необходимое для вычисления и то, которое требуется для выполнения . Я буду считать , что умножая разрядное число с помощью - битовое число занимает ровно раз по методу школы книги; дополнения и т. д. имеют постоянное время. В результате вычисление занимает времени. f 1 ( n ) = n 2 n f 1 ( n ) m n m n n 2 log 2 2 ( n )
Предположим, что мы используем двоичное возведение в степень для вычисления . Двоичное возведение в степень выполняет два вида операций при вычислении : возводит в квадрат текущий продукт и умножает текущий продукт на зависимости от того, равен ли текущий бит в двоичном расширении 0 или 1. В худшем случае , является степенью двойки, так что двоичное возведение в степень многократно возводит в квадрат свой текущий продукт, пока не достигнет ответа. Обратите внимание, что имеет битов, так что число таких расквартирований . Это тот случай, который мы проанализируем ниже.f ( n ) n n 2 n 2 n 2 m ′ = ⌈ 2 log 2 ( n ) ⌉ m = m ′ - 1
Первый квадрат занимает время , в результате получается произведение -бит. Второе возведение в квадрат занимает два битных числа и выполняется за время , в результате чего получается произведение. Продолжая, шаг занимает времени и выводит -битное произведение. Этот процесс останавливается на шаге; в результате требуется времяo 1 = 2 log 2 ( n ) o 1 t 2 = o 2 1 o 2 = 2 o 1 i t i = 4 i - 1 log 2 2 n o i = 2 i log 2 ( н ) м
.
Когда включена первоначальная стоимость возведения в квадрат, мы находим самое большее время
Запись