Множення Карацуби
Множення Карацуба - метод швидкого множення, який дозволяє перемножувати два 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), і, отже, справедливо нерівність:
Зауваження [ред.]
Відзначимо, що представлений вище перший спосіб множення можна трактувати як алгоритм обчислення з точністю до
знаків функції
в деякій точці
.
Якщо розбивати
не на два, а на більшу кількість доданків, то можна отримувати асимптотично кращі оцінки складності обчислення добутку (зведення в квадрат).
Метод множення Шенхаге - штрассе має меншу асимптотичну складність, ніж алгоритм Карацуба.
Див також [ред.]
- Складність обчислення (бітова)
- АГС метод Гаусса
- Метод БВЕ
- Швидкі алгоритми
- Метод множення Шенхаге - штрассе
- Алгоритм Фюрера
Примітки [ред.]
- ↑ Карацуба Є. А. Швидкі алгоритми і метод БВЕ, 2008.
- ↑ Алексєєв В. Б. Від методу Карацуба для швидкого множення чисел до швидких алгоритмах для дискретних функцій (1997) С. 20-27.
- ↑ Карацуба А., Офман Ю. Множення багатоцифрових чисел на автоматах (1962).
- ↑ Karacuba A. Berechnungen und die Kompliziertheit von Beziehungen (1975).
- ↑ Карацуба А. А. Складність обчислень (1995) С. 186-202.
- ↑ Кнут Д. Мистецтво програмування. — 3-е изд. — М.: Вильямс, 2007. — 832 с. — ISBN 0-201-89684-2
Посилання [ред.]
- Http://212.cmc-msu.ru/files/kniga.html
- Http://gersoo.free.fr/docs/karat/kar.html
- Http://numbers.computation.free.fr/Constants/Algorithms/representation.html
- Http://www-math.uni-paderborn.de/mca/mult.html
- Http://www-2.cs.cmu.edu/ ~ cburch/251/karat /
- Http://www.cs.pitt.edu/ ~ kirk/cs1501/animations /
- Http://www.cs.princeton.edu/introcs/79crypto/Karatsuba.java.html
- Http://www.ccas.ru/personal/karatsuba/divcru.htm
- Http://www.ccas.ru/personal/karatsuba/alg.htm
- Http://habrahabr.ru/blogs/algorithm/124258/






















