Множення Карацуби — метод швидкого множення, який дозволяє перемножувати два n-значних числа зі складністю обчислення:

Цей підхід відкрив новий напрямок в обчислювальній математиці[1][2].
Історія
Проблема оцінки кількості бітових операцій, необхідних для обчислення добутку двох n-значних чисел, або [джерело?].
Множення двох n-значних цілих чисел звичайним (шкільним) методом «у стовпчик» зводиться, по суті, до додавання n n-значних чисел. Тому для складності цього «шкільного» або «наївного» методу є оцінка зверху:

У 1956 р. А. М. Колмогоров сформулював гіпотезу, що нижня оцінка для
при будь-якому методі множення є також величина порядку
(так звана «гіпотеза
» Колмогорова). На правдоподібність гіпотези
вказував той факт, що метод множення «в стовпчик» відомий не менше чотирьох тисячоліть (наприклад, цим методом користувалися шумери), і якби існував швидший метод, то його, імовірно, уже б знайшли. Однак, 1960 року Анатолій Карацуба[3][4][5][6] знайшов новий метод множення двох n-значних чисел з оцінкою складності

і тим самим спростував «гіпотезу
».
Згодом метод Карацуби узагальнили до парадигми «розділяй і володарюй», іншими важливими прикладами якої є метод двійкового розбиття, двійковий пошук, метод бісекції тощо.
Нижче подано два варіанти множення Карацуби.
Опис методу
Перший варіант
Цей варіант заснований на формулі

Оскільки
, то множення двох чисел
і
еквівалентне за складністю піднесенню до квадрата.
Нехай
є
-значним числом, тобто

де
.
Будемо вважати для простоти, що
. Представляючи
у вигляді

де

і

знаходимо:

Числа
і
є
-значними. Число
може мати
знаків. У цьому випадку представимо його у вигляді
, де
є
-значне число,
— однозначне число. Тоді

Позначимо
- кількість операцій, достатня для піднесення
-значного числа в квадрат за формулою (1). З (1) випливає, що для
справедлива нерівність:

де
є абсолютна константа. Справді, права частина (1) містить суму трьох квадратів
-значних чисел,
, які для свого обчислення потребують
операцій. Усі інші обчислення в правій частині (1) (а саме: множення на
, п'ять додавань і одне віднімання) не більше ніж
-значних чисел вимагають по порядку не більше
операцій. Звідси випливає (2). Застосовуючи (2) послідовно до

і беручи до уваги, що

отримуємо



Таким чином для кількості
операцій, достатнього для зведення
-значного числа в квадрат за формулою (1) виконується оцінка:

Якщо ж
не є ступенем двох, то визначаючи ціле число
нерівностями
, представимо
як
-значне число, тобто вважаємо останні
знаків рівними нулю:

Усі інші міркування залишаються в силі і для
виходить така ж верхня оцінка за порядком величини
.
Другий варіант
Це безпосереднє множення двох
-значних чисел, засноване на формулі

Нехай, як і раніше
,
,
і
- два
-значних числа. Представляючи
і
у вигляді

де
—
-значні числа, знаходимо:

Таким чином, у цьому випадку формула (1) замінюється формулою (3). Якщо тепер позначити символом
кількість операцій, достатню для множення двох
-значних чисел за формулою (3), то для
виконується нерівність (2), і, отже, справедливою є нерівність:

Приклад
Множимо 648*356. Візьмемо B=100.
- Перший множник подамо як 6*100 + 48.
Другий множник подамо як 3*100 + 56.
За формулою Карацуби:
x*y = (x1*B + x0)*(y1*B + y0) = x1*y1*B2 + Z1*B + x0*y0,
- де Z1 = (x1 + x0)*(y1 + y0) − x1*y1 − x0*y0,
а добутки x1*y1 та x0*y0 обчислюють лише один раз.
Маємо: 648*356=(6*100+48)*(3*100+56)=6*3*1002 + Z1*100 + 48*56.
Обчислюємо 6*3 =18; 48*56 = 2688;
Z1 = (6+48)*(3+56) − 6*3 − 48*56 = 54*59 − 18 − 2688 = 480.
У цілому:
18*1002 + Z1*100 + 2688 = 18 00 00 + 480 00 + 2688 = 23 06 88.
- Для множення пар чисел 54*59 та 48*56, можна застосувати формулу Карацуби рекурсивно, поклавши B=10.
- Оскільки ЕОМ оперують двійковими числами, то для машинних розрахунків варто обрати B=2k.
Зауваження
Представлений вище перший спосіб множення можна трактувати як алгоритм обчислення з точністю до
знаків функції
в деякій точці
.
Якщо розбивати
не на два, а на більшу кількість доданків, то можна отримати асимптотично кращі оцінки складності обчислення добутку (піднесення до квадрату). Зокрема, такий шлях застосовано в алгоритмі Тоома — Кука[en].
Метод множення Шьонхаге — Штрассена має меншу асимптотичну складність, ніж алгоритм Карацуби, однак на практиці він має перевагу лише для великих значень n.
Примітки
Посилання