Главная > Математика > Основы компьютерной алгебры с приложениями
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

5.1.2. Неклассический подход: модулярный алгоритм для наибольшего общего делителя

Как уже говорилось, в следующих разделах мы детально рассмотрим два метода субрезультантных PRS. Однако непосредственно сейчас мы представим алгоритм, который читатель должен был предвидеть.

Ключевое для этого алгоритма наблюдение состоит в том, что вычисление наибольшего общего делителя двух полиномов над конечным полем не приводит к росту, поскольку коэффициенты не могут превосходить размер модуля. Поэтому мы можем преобразовать задачу нахождения наибольшего общего делителя двух полиномов над целыми числами к нескольким задачам нахождения

наибольшего общего делителя двух полиномов над некоторыми конечными полями. По теореме 5.1.2, сформулированной ниже, ответы к этим задачам затем интерполируются (с использованием греко-китайского алгоритма), чтобы получить истинный наибольший общий делитель над целыми числами. Это в общих чертах составляет модулярный -алгоритм. В следующих рассуждениях обозначает полином

Теорема 5.1.2. Пусть — два полинома в Тогда для всех простых , таких, что не делит имеет место неравенство где над и существует только конечное число простых , таких, что

Локазательство. Поскольку не делит то, следовательно, не делит старший коэффициент полинома а значит, первое утверждение тривиально. Второе утверждение вытекает из наблюдения, что степень полинома может превосходить степень полинома только если делит один из старших коэффициентов предыдущих членов PRS, а это мажет случиться только для конечного числа простых чисел.

Простые числа , для которых называются «несчастливыми» и отбрасываются в описанном ниже алгоритме; более того, с целью эффективности каждое простое число выбирается меньшим машинного слова. В модулярном -алгоритме используются также следующие факты:

(1) Если полином неприводим над целыми по модулю , где не делит , то неприводим также над целыми числами; по существу это теорема 3.2.16.

(2) Если полиномы взаимно просты над целыми по модулю где не делит и не делит то полиномы взаимно просты над целыми числами; это следует непосредственно из теоремы 5.1.2.

М. Модулярный алгоритм (Modular Algorithm)

Вход: Два примитивных полинома от одной переменной с целыми коэффициентами.

Выход: Полином над целыми числами.

1. [Инициализация] Положить с Выбрать простое , которое не делит и вычислить нормированный полином Положить если , то вернуть

Положить ).

Если (где оба деления выполняются над целыми числами), то вернуть

3. [Новое простое] Выбрать новое простое число которое не делит и вычислить нормированный полином если то вернуть

4. [Несчастливое ] Если то — несчастливое простое число; перейти к шагу 3. Если то — несчастливое простое число; положить и перейти к шагу 2.

5. [Цикл по коэффициентам] В этой точке Положить выполнять: применить к коэффициентам при и по модулю пусть — результат интерполяции; положить [При использовании симметричной системы вычетов коэффициенты полинома по абсолютной величине заметим также, что полином нормирован.]

6. [Обновление] Положить и перейти к шагу 2.

Анализ времени работы, алгоритма М. Из теоремы 5.1.2 следует, что приведенный выше алгоритм завершается, поскольку число несчастливых простых чисел конечно. [См. также (Brown, 1971, th. 1), где дана оценка числа возможных несчастливых простых Браун показал, что преимущество модулярного алгоритма над классическими проявляется только тогда, когда данные полиномы достаточно большие и достаточно плотные. В разреженном случае (много отсутствующих членов) преимущество анализировать трудно.

Пример предложен чуть дальше. Предыдущий алгоритм не использует априорную оценку числа различных используемых

простых чисел; интересная версия алгоритма М, использующая такую оценку, приводится ниже.

M1. Модулярный алгоритм, версия 1 (Modular Algorithm, Version 1)

Вход: Два примитивных полинома от одной переменной с целыми коэффициентами.

Выход: Полином над целыми числами.

1. [Инициализация] Выбрать простое , которое не делит и вычислить Положить если то вернуть Положить

2. [Новое простое] Выбрать новое простое число которое не делит Вычислить Если то вернуть

3. [Несчастливое простое?] Если то — несчастливое простое число; перейти к шагу 2. Если то — несчастливое Простое число; положить и перейти к шагу 2.

4. [Цикл по коэффициентам] В этой точке Положить Для выполнять: применить к коэффициентам при по модулю соответственно; пусть q — результат интерполяции, положить (Использовать симметричную систему вычетов.)

5. [Готово?] Положить Еслир то вернуть иначе перейти на шаг 2.

В действительности значение В, используемое в приведенном выше алгоритме, — это оценка максимума абсолютной величины коэффициентов полинома Такая оценка может быть получена из теоремы А.О. Гельфонда (Трансцендентные и алгебраические числа М.: Гостехиздат, 1952), но в практических вычислениях вместо этого используется максимум абсолютных величин коэффициентов полиномов Выбирается значение так как оно работает в большинстве случаев (Brown, 1971). Ясно, что существуют исключения; например, если то

и мы имеем дело со случаем, когда коэффициенты делителя больше коэффициентов делимого.

Заметим, что обе версии модулярного -алгоритма легко обобщить для обработки полиномов от многих переменных. Можно также воспользоваться алгоритмами подъема, описанными в гл. 6, чтобы найти наибольший общий делитель двух полиномов над . Это — так называемый расширенный -алгоритм Цассенхаузена [Extended Zassenhaus который не описывается здесь, но подробности можно найти в литературе (Miola et al., 1974; Moses et al., 1973; Yun, 1974).

Пример. Найдем наибольший общий делитель полиномов

Используя М, заметим сначала, что а затем для Затем, на шаге 2 вычисляем полином который делит как так и . Поэтому .

Используя сначала вычислим а затем Поскольку этих двух простых чисел достаточно. С помощью греко-китайской теоремы об остатках мы из полиномов получаем полином

<< Предыдущий параграф Следующий параграф >>
Оглавление