Понимание алгоритма Шёнхаге-Штрассена (умножение огромных целых чисел)
-
21-08-2019 - |
Вопрос
Мне нужно максимально эффективно умножить несколько целых чисел длиной в 1000 цифр в Python.Числа считываются из файла.
Я пытаюсь реализовать Шёнхаге-Штрассен алгоритм целочисленного умножения, но я застрял в понимании определения и математики, лежащей в его основе, особенно быстрого преобразования Фурье.
Любая помощь в понимании этого алгоритма, например, практический пример или псевдокод, будет высоко оценена.
Решение
Глава 4.3.3 книги Кнута ТАОКП описывает это, а также в других главах есть псевдокод БПФ, который можно использовать для этого.
Другие советы
Не изобретайте велосипед.GMP имеет отличную высокопроизводительную реализацию этого алгоритма, и любой алгоритм, написанный на чистом Python, будет как минимум в 100 раз медленнее просто потому, что Python — интерпретируемый язык.Использовать gmpy для вызова GMP из вашего приложения Python.Мне также интересно, над каким приложением вы работаете, требующим умножения таких больших чисел — возможно, есть более простой способ решить вашу проблему.
Кроме того, как упоминалось в других ответах, «длиной в несколько тысяч цифр» недостаточно, чтобы оправдать Шёнхаге-Штрассен (вам нужно иметь как минимум 10 000 десятичных цифр, а возможно, и больше).В этом диапазоне обычно используется какой-то вариант Тум-Кука, например Тум-3.Опять же, не пишите это самостоятельно на Python — реализация GMP очень тщательно оптимизирована.