Пусть мы хотим посчитать произведение двух многочленов P(x)=k=0∑npk⋅xk и Q(x)=k=0∑nqk⋅xk.
Попробуем применить метод «разделяй и властвуй», чтобы добиться временной сложности меньшей,
чем O(n2). В лоб, к сожалению, не получится. Применим хитрость.
Сгруппируем множители в многочленах P и Q степени n=2k,
превратив каждый многочлен в пару многочленов степени k.
P(x)=a(x)+xk⋅b(x)иQ(x)=c(x)+xk⋅d(x)
Произведение P(x)⋅Q(x) можно произвести, используя только 3 умножения
маленьких многочленов, вместо привычных 4:
При таком алгоритме на итерацию требуется 3 умножения и 6 сложений.
Пусть алгоритм, вычисляющий произведение двух многочленов степени n,
требует M(n) умножений и A(n) сложений.
Оценим количество умножений.
Как мы уже говорили, можно дополнить многочлены нулями до длины 2⌊log2n⌋+1.
Тогда вычисления будут проще, но количество умножений возрастет.
Дополнение нулями до 2⌊log2n⌋+1 достаточно неэффективное
Важное неравенство, позволяющее оценить количество требуемых умножений
nlog23⩽M(n)⩽3⋅nlog23
То есть, алгоритм Карацубы (в обоих вариантах, с дополнениями нулями и без)
требует Θ(nlog23) умножений.
Оптимизации
Накладные расходы на рекурсию иногда становятся слишком большими.
Можно выполнять алгоритм Карацубы только пока степени многочленов больше какого-то числа Nmax.
Для многочленов, чьи степени меньше Nmax, выполняем обычное умножение.