1.4.7. Использование модульной арифметики в кольце полиномов
Последовательность
равная круговой свертке последовательностей
является последовательностью коэффициентов полинома
где
Для вычисления (1.61) воспользуемся китайской теоремой об остатках. Если представить полином
в виде произведения
взаимно-простых полиномов с коэффициентами из поля рациональных чисел (использование других полей рассмотрено в [1.12])
то
где
полиномы
должны удовлетворять соотношениям
Пример 1.16. Вывести алгоритм вычисления круговой свертки последовательностей
длиной
Согласно (1.61):
Представим
где
Тогда
Согласно
Согласно
Отсюда
Подставляя полученные значения в (1.63), получаем
или
В том случае, когда необходимо повторить вычисление для различных по следовательностей
при одной и той же последовательности и
целесообразно все вычисления, связанные только с
выполнять заранее и для дальнейшего использования хранить в ячейках памяти. Такая предварительная обработка данных существенно повышает эффективность вычислений.
Пример 1.17. Алгоритм
-точечной круговой свертки с предварительной обработкой данных (см. пример 1.16) имеет вид:
В [1.12] показано, что минимальное число операций умножения, требуемых для вычисления (1.16), составляет
где К равно числу различных неприводимых в поле С множителей полинома
Для многих (особенно простых)
это число достижимо ценой чрезмерного увеличения числа операций сложения. Поэтому предпочтительными являются так называемые субоптимальные алгоритмы с несколько большим числом операций умножения, но гораздо меньшим числом операций сложения. В [1.12] приведены алгоритмы с предварительной обработкой данных для нескольких значений
. В табл. 1.5 приведено число требуемых арифметических операций, необходимых для их реализация.
Таблица 1.5 (см. скан)
В том случае, когда
где
— взаимно-простые числа, исходную матрицу свертки, полученную путем соответствующей перестановки строк и столбцов, можно представить в виде циклической матрицы размера
элементами которой, в свою очередь, являются циклические матрицы размера
и свести тем самым вычисление
-точечной свертки к вычислению
и
-точеч-ных сверток (алгоритм Агарваля — Кули [1.12]).
Рассматриваемый метод является, по существу, методом представления одномерной
-точечной свертки в виде двумерной
-точечной свертки:
где
Пример 1.18. Рассмотрим алгоритм вычисления
-точечной круговой свертки. Положим
. Сопоставим каждому индексу
пару координат
, где
Тогда получим следующее взаимно-однозначное отображение: