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. Рассмотрим алгоритм вычисления -точечной круговой свертки. Положим . Сопоставим каждому индексу пару координат , где Тогда получим следующее взаимно-однозначное отображение: