Понимание Schönhage-Штрассен алгоритм (огромное число умножение)
Мне нужно умножить несколько 1000-разрядных целых чисел как можно эффективнее в Python. Числа считываются из файла.
Я пытаюсь реализовать Schönhage-Штрассен алгоритм для целочисленного умножения, но я застрял на понимании определения и математики за ним, особенно быстрого преобразования Фурье.
любая помощь для понимания этого алгоритма, как практический пример или некоторый псевдо-код, будет очень оцененный.
3 ответов
глава 4.3.3 кнута TAOCP описывает его, а также имеет некоторый псевдокод FFT в других главах, которые могут быть использованы для этого.
1000 цифр "мало" для Schönhage-Strassen, чтобы действительно стоило использовать. Вы можете взглянуть на Тоома Кука умножение. gmpy является оболочкой Python для gmp, предоставляющей эти функции.
Не изобретайте колесо. GMP имеет отличную высокопроизводительную реализацию этого алгоритма, и любой алгоритм, написанный на чистом Python, будет по крайней мере в 100 раз медленнее, просто потому, что Python является интерпретируемым языком. Использовать gmpy для вызова GMP из вашего приложения Python. Мне также интересно, над каким приложением вы работаете, которое требует умножения таких больших чисел - может быть более простой способ справиться с вашей проблемой.
также, как упомянутый другими ответами, "несколько цифр 1000" не достаточно длинны, чтобы оправдать Schönhage-Strassen (у вас должно быть не менее 10000 десятичных цифр, возможно, больше). Некоторые варианты Toom-Cook, такие как Toom-3, обычно используются в этом диапазоне. Опять же, не пишите это сами в Python - реализация GMP очень тщательно оптимизирована.