Алгоритм Шьонхаге — Штрассена

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Метод множення Шенхаге — Штрассена (англ. Schönhage–Strassen algorithm) — алгоритм множення великих цілих чисел, заснований на швидкому перетворенні Фур'є, потребує ) бітових операцій, де  — кількість двійкових цифр у добутку[1].

Історія[ред. | ред. код]

Метод швидкого перетворення Фур'є зі складністю став широко відомим 1965 року після публікації статті Джеймса Кулі та Джона Тьюкі.

Застосувати швидке перетворення Фур'є для множення великих чисел запропонував 1968 року Фолькер Штрассен. Разом із Арнольдом Шьоханге вони уточнили метод та опублікували алгоритм 1971 року[2][3].

Ідея алгоритму[ред. | ред. код]

Фактично — це метод множення многочленів від однієї змінної; перетворюється на алгоритм множення чисел, якщо числа подати як многочлени від основи системи числення, а після отримання добутку многочленів зробити знесення старших розрядів у коефіцієнтах. Наприклад, для множення 157 на 171 (у десятковій системі числення) виконуються такі операції:

  • подається як , а  — як , де ;
  • за допомогою швидкого перетворення Фур'є перемножуються многочлени і (результат: );
  • застосовується знесення старших розрядів у коефіцієнтах многочлена-добутку: .
    Результат: .

Також алгоритм дозволяє множити за модулем чисел Ферма , якщо застосувати двійкову систему числення.

Оцінка складності[ред. | ред. код]

Як довели у своїй публікації Шенхаге і Штрассен, алгоритм потребує ) бітових операцій, де  — кількість двійкових цифр у добутку[2][1].

Порівняння з іншими методами[ред. | ред. код]

На практиці метод Шенхаге — Штрассена починає перевершувати раніше відомі класичні методи, такі як множення Карацуби та алгоритм Тоома — Кука (узагальнення методу Карацуби), починаючи з цілих чисел порядку (від 10 000 до 40 000 десяткових знаків)[4][5].

Метод вважався асимптотично найшвидшим до винайдення алгоритму Фюрера (2007 рік), який має меншу асимптотичну оцінку: , де log*n — повторний логарифм[6]. Утім, різниця в часі виконання між цими двома методами стає помітною лише для настільки великих чисел, які практично не трапляються.

Примітки[ред. | ред. код]

  1. а б Bürgisser P., Clausen M., Shokrollahi A. Algebraic Complexity Theory. — Berlin : Springer-Verlag, 1997. — 618 p. — ISBN 3-540-60582-7..
  2. а б Knuth, 2008, Section 4.3.3 С.
  3. Schönhage A., Strassen V. Schnelle Multiplikation großer Zahlen // Computing. — 1971. — № 7. — С. 281—292.
  4. Meter van R., Itoh K. M. Fast quantum modular exponentiation // Physical Review A. — 2005. — Т. 71. Архівовано з джерела 7 лютого 2006. Процитовано 2023-05-28.
  5. Coronado García L. C. Can Schönhage multiplication speed up the RSA encryption or decryption? // University of Technology. — Darmstadt, 2005. Архівовано з джерела 29 грудня 2009. Процитовано 2023-05-28.
  6. Fürer M. Faster integer multiplication // STOC 2007 Proceedings. — 2007. — С. 57—66. Архівовано з джерела 25 квітня 2013.