Про умножение и памяь не очень понял. Попробую сам, возможно ошибаюсь. Нам требуется выбрать число p такое, чтобы результат свертки был меньше этого p. Если есть две последовательности длиной N, состоящие из чисел M, то макс коэф. будет равен N*M^2. Если для M надо q разрядов, то слово памяти должно быть равно 2*q+log2(N). M=65535, N=1024 => 32+10=42 бита. Для вычисления (через фурье) надо памяти порядка O(N). Если заранее знать одну из последовательностей, то оценка на максимальное число бит в результате может быть лучше. Промежуточные значения у нас по модулю p в поле GF(p), и их переполнение не влияет на результат.
Из минусов вижу сложность комбинирования алгоритмов под желаемое N, ручная работа. и вычеты по модулю или сдвиги не дешевле умножения или сложения на ПК.
|