В математике и компьютерной алгебре факторизация многочленов или полиномиальная факторизация выражает многочлен с коэффициентами в заданном поле или в целых числах как произведение неприводимых множителей с коэффициентами в той же области. Полиномиальная факторизация является одним из фундаментальных компонентов систем компьютерной алгебры .
Первый алгоритм факторизации полиномов был опубликован Теодором фон Шубертом в 1793 году. [1] Леопольд Кронекер заново открыл алгоритм Шуберта в 1882 году и расширил его до многомерных полиномов и коэффициентов в алгебраическом расширении. Но большая часть знаний по этой теме не старше примерно 1965 года и первых систем компьютерной алгебры: [2]
Когда давно известные алгоритмы с конечным шагом впервые были помещены на компьютеры, они оказались крайне неэффективными. Тот факт, что почти любой одномерный или многомерный полином степени до 100 и с коэффициентами умеренного размера (до 100 бит) может быть факторизован современными алгоритмами за несколько минут компьютерного времени, показывает, насколько успешно эта проблема решалась в течение последних пятнадцати лет. (Эрих Кальтофен, 1982)
Современные алгоритмы и компьютеры могут быстро факторизовать одномерные многочлены степени более 1000, имеющие коэффициенты с тысячами цифр. [3] Для этой цели, даже для факторизации по рациональным числам и числовым полям , фундаментальным шагом является факторизация многочлена по конечному полю .
Кольца полиномов над целыми числами или над полем являются областями уникальной факторизации . Это означает, что каждый элемент этих колец является произведением константы и произведения неприводимых полиномов (тех, которые не являются произведением двух непостоянных полиномов). Более того, это разложение является единственным с точностью до умножения множителей на обратимые константы.
Факторизация зависит от базового поля. Например, фундаментальная теорема алгебры , утверждающая, что каждый многочлен с комплексными коэффициентами имеет комплексные корни, подразумевает, что многочлен с целыми коэффициентами может быть разложен (с помощью алгоритмов нахождения корней ) на линейные множители над комплексным полем C. Аналогично, над полем действительных чисел неприводимые множители имеют степень не более двух, в то время как существуют многочлены любой степени , которые неприводимы над полем рациональных чисел Q.
Вопрос о полиномиальной факторизации имеет смысл только для коэффициентов в вычислимом поле , каждый элемент которого может быть представлен в компьютере и для которого существуют алгоритмы арифметических операций. Однако это не является достаточным условием: Фрёлих и Шепердсон приводят примеры таких полей, для которых не может существовать алгоритм факторизации. [4]
Поля коэффициентов, для которых известны алгоритмы факторизации, включают простые поля (то есть поле рационального числа и поля целых чисел по модулю простого числа ) и их конечно порожденные расширения полей . Целочисленные коэффициенты также поддаются обработке. Классический метод Кронекера интересен только с исторической точки зрения; современные алгоритмы осуществляются последовательностью:
и скидки:
В этом разделе мы покажем, что факторизация по Q (рациональным числам) и по Z (целым числам) по сути является одной и той же задачей.
Содержание полинома p ∈ Z [ X ], обозначаемое "cont( p )", является, с точностью до знака, наибольшим общим делителем его коэффициентов. Примитивная часть p равна primpart( p ) = p /cont( p ), что является примитивным полиномом с целыми коэффициентами. Это определяет факторизацию p в произведение целого числа и примитивного полинома. Эта факторизация уникальна с точностью до знака содержания. Обычно принято выбирать знак содержания таким образом , чтобы старший коэффициент примитивной части был положительным.
Например,
представляет собой разложение на содержательную и примитивную части.
Каждый многочлен q с рациональными коэффициентами может быть записан
где p ∈ Z [ X ] и c ∈ Z : достаточно взять для c кратное всех знаменателей коэффициентов q (например, их произведение) и p = cq . Содержание q определяется как:
и примитивная часть q — это часть p . Что касается многочленов с целыми коэффициентами, это определяет факторизацию в рациональное число и примитивный многочлен с целыми коэффициентами. Эта факторизация также является единственной с точностью до выбора знака.
Например,
представляет собой разложение на содержательную и примитивную части.
Гаусс доказал, что произведение двух примитивных многочленов также примитивно ( лемма Гаусса ). Это означает, что примитивный многочлен неприводим над рациональными числами тогда и только тогда, когда он неприводим над целыми числами. Это также означает, что факторизация над рациональными числами многочлена с рациональными коэффициентами совпадает с факторизацией над целыми числами его примитивной части. Аналогично, факторизация над целыми числами многочлена с целыми коэффициентами является произведением факторизации его примитивной части на факторизацию его содержимого.
Другими словами, вычисление НОД для целых чисел сводит факторизацию многочлена над рациональными числами к факторизации примитивного многочлена с целыми коэффициентами, а факторизацию над целыми числами — к факторизации целого числа и примитивного многочлена.
Все, что было сказано выше, остается верным, если заменить Z на кольцо многочленов над полем F , а Q на поле рациональных функций над F от тех же переменных, с той лишь разницей, что «с точностью до знака» следует заменить на «с точностью до умножения на обратимую константу в F ». Это сводит факторизацию над чисто трансцендентным расширением поля F к факторизации многомерных многочленов над F.
Если два или более множителей многочлена одинаковы, то многочлен является кратным квадрату этого множителя. Кратный множитель также является множителем производной многочлена (по любой из переменных, если их несколько).
Для одномерных многочленов множественные множители эквивалентны множественным корням (над подходящим полем расширения). Для одномерных многочленов над рациональными числами (или, в более общем смысле, над полем нулевой характеристики ) алгоритм Юня использует это для эффективного разложения многочлена на бесквадратные множители, то есть множители, которые не являются кратными квадрату, выполняя последовательность вычислений НОД, начиная с НОД( f ( x ), f '( x )). Чтобы разложить исходный многочлен, достаточно разложить на множители каждый бесквадратный множитель. Таким образом, бесквадратная факторизация является первым шагом в большинстве алгоритмов разложения многочленов.
Алгоритм Юня распространяет это на многомерный случай, рассматривая многомерный полином как одномерный полином над кольцом полиномов.
В случае многочлена над конечным полем алгоритм Юня применим только в том случае, если степень меньше характеристики, поскольку в противном случае производная ненулевого многочлена может быть равна нулю (над полем с p элементами производная многочлена от x p всегда равна нулю). Тем не менее, последовательность вычислений НОД, начиная с многочлена и его производной, позволяет вычислить бесквадратное разложение; см. Разложение многочленов над конечными полями#Разложение на бесквадратные множители .
В этом разделе описываются методы из учебника, которые могут быть удобны при вычислениях вручную. Эти методы не используются для компьютерных вычислений, поскольку они используют факторизацию целых чисел , которая в настоящее время медленнее, чем факторизация полиномов.
Два следующих метода начинаются с одномерного полинома с целыми коэффициентами для нахождения факторов, которые также являются полиномами с целыми коэффициентами.
Все линейные множители с рациональными коэффициентами можно найти с помощью теста на рациональные корни . Если многочлен, который нужно разложить на множители, равен , то все возможные линейные множители имеют вид , где — целый множитель и — целый множитель . Все возможные комбинации целочисленных множителей можно проверить на валидность, и каждый допустимый множитель можно разложить на множители с помощью полиномиального длинного деления . Если исходный многочлен является произведением множителей, по крайней мере два из которых имеют степень 2 или выше, этот метод обеспечивает только частичную факторизацию; в противном случае факторизация будет полной. В частности, если есть ровно один нелинейный множитель, это будет полином, оставшийся после разложения всех линейных множителей. В случае кубического многочлена , если кубический многочлен вообще поддается факторизации, тест на рациональные корни дает полную факторизацию либо на линейный множитель и неприводимый квадратичный множитель, либо на три линейных множителя.
Метод Кронекера направлен на разложение одномерных многочленов с целыми коэффициентами на многочлены с целыми коэффициентами.
Метод использует тот факт, что оценка целочисленных многочленов при целочисленных значениях должна давать целые числа. То есть, если — многочлен с целочисленными коэффициентами, то — целое число, как только a — целое число. Существует только конечное число возможных целых значений для множителя a . Таким образом, если — множитель значения должен быть одним из множителей
Если искать все множители заданной степени d , можно рассмотреть значения для , которые дают конечное число возможностей для кортежа Каждый имеет конечное число делителей , и каждый -кортеж, где запись является делителем , то есть кортеж вида , производит уникальный многочлен степени не более , который может быть вычислен с помощью полиномиальной интерполяции . Каждый из этих многочленов можно проверить на то, является ли он множителем, с помощью полиномиального деления . Поскольку их было конечное число и каждый имеет конечное число делителей, таких кортежей конечное число. Таким образом, исчерпывающий поиск позволяет найти все множители степени не более d .
Например, рассмотрим
Если этот многочлен факторизуется по Z , то по крайней мере один из его факторов должен иметь степень два или меньше, поэтому однозначно определяется тремя значениями . Таким образом, мы вычисляем три значения , и . Если одно из этих значений равно 0, мы имеем линейный фактор. Если значения не равны нулю, мы можем перечислить возможные факторизации для каждого. Теперь 2 может факторизоваться только как
Следовательно, если существует целочисленный полиномиальный фактор второй степени, он должен принимать одно из значений
и аналогично для p (1). Существует восемь факторизаций 6 (по четыре для 1×6 и 2×3), что в общей сложности составляет 4×4×8 = 128 возможных троек ( p (0), p (1), p (−1)), из которых половина может быть отброшена как отрицательные значения другой половины. Таким образом, мы должны проверить 64 явных целочисленных многочлена как возможные множители . Их исчерпывающая проверка показывает, что
построенный из ( g (0), g (1), g (−1)) = (1,3,1) факторов .
Разделив f ( x ) на p ( x ), получим другой множитель , так что . Теперь можно провести рекурсивную проверку, чтобы найти множители p ( x ) и q ( x ), в данном случае используя тест на рациональный корень. Оказывается, они оба неприводимы, поэтому неприводимая факторизация f ( x ) выглядит так: [5]
Если — одномерный многочлен над целыми числами, предположительно свободный от содержимого и квадратов, то начинаем с вычисления границы, такой что любой фактор имеет коэффициенты с абсолютным значением, ограниченным . Таким образом, если — целое число, большее , и если известно по модулю , то можно восстановить из его образа mod .
Алгоритм Цассенхауза работает следующим образом. Сначала выбираем простое число , чтобы изображение оставалось свободным от квадратов и имело ту же степень, что и . Затем разлагаем на множители . Это дает целочисленные многочлены , произведение которых соответствует . Затем применяем подъем Гензеля ; это обновляет таким образом, что их произведение соответствует , где достаточно велико, чтобы превышать : таким образом, каждый соответствует четко определенному целочисленному многочлену. По модулю многочлен имеет множители (до единиц): произведения всех подмножеств . Эти множители по модулю не обязательно должны соответствовать «истинным» множителям в , но мы можем легко проверить их делением на . Таким образом, все неприводимые истинные множители могут быть найдены путем проверки в большинстве случаев, сведенных к случаям путем пропуска дополнений. Если является приводимым, число случаев еще больше сокращается путем удаления тех , которые появляются в уже найденном истинном множителе. Алгоритм Цассенхауза быстро обрабатывает каждый случай (каждое подмножество), однако в худшем случае он рассматривает экспоненциальное число случаев.
Первый алгоритм полиномиального времени для факторизации рациональных многочленов был открыт Ленстрой, Ленстрой и Ловасом и является применением алгоритма редукции решеточного базиса (LLL) Ленстры–Ленстры–Ловаса (Lenstra, Lenstra & Lovász 1982). Упрощенная версия алгоритма факторизации LLL выглядит следующим образом: вычислить комплексный (или p -адический) корень α многочлена с высокой точностью, затем использовать алгоритм редукции решеточного базиса Ленстры–Ленстры–Ловаса для нахождения приблизительной линейной связи между 1, α , α 2 , α 3 , . . . с целыми коэффициентами, которая может быть точной линейной связью и полиномиальным множителем . Можно определить границу для точности, которая гарантирует, что этот метод даст либо множитель, либо доказательство неприводимости. Хотя этот метод завершается за полиномиальное время, на практике он не используется, поскольку решетка имеет высокую размерность и огромные элементы, что замедляет вычисления.
Экспоненциальная сложность в алгоритме Цассенхауза возникает из комбинаторной проблемы: как выбрать правильные подмножества . Современные реализации факторизации работают аналогично Цассенхаузу, за исключением того, что комбинаторная проблема преобразуется в решетчатую задачу, которая затем решается с помощью LLL. [6] В этом подходе LLL не используется для вычисления коэффициентов факторов, а скорее для вычисления векторов с записями в {0,1}, которые кодируют подмножества, соответствующие неприводимым истинным факторам.
Мы можем разложить на множители многочлен , где поле является конечным расширением . Во-первых, используя факторизацию без квадратов, мы можем предположить, что многочлен является бесквадратным. Затем мы определяем фактор-кольцо степени ; это не поле, если только не является неприводимым, но это приведенное кольцо , поскольку является бесквадратным. Действительно, если
— искомая факторизация p ( x ), кольцо однозначно разлагается на поля следующим образом:
Мы найдем это разложение, не зная факторизации. Во-первых, мы явно запишем L как алгебру над : мы выбираем случайный элемент , который генерирует над с высокой вероятностью по теореме о примитивном элементе . Если это так, мы можем вычислить минимальный многочлен над , найдя -линейное отношение между 1, α , . . . , α n . Используя алгоритм факторизации для рациональных многочленов, мы разлагаем на неприводимые в :
Таким образом, мы имеем:
где соответствует . Это должно быть изоморфно предыдущему разложению .
Генераторы L — это x вместе с генераторами над ; записывая их как полиномы в , мы можем определить вложения и в каждый компонент . Найдя минимальный полином в , мы вычисляем , и таким образом разлагаем на множители
«Численная факторизация» обычно относится к факторизации многочленов с действительными или комплексными коэффициентами, коэффициенты которых известны лишь приблизительно, как правило, потому, что они представлены в виде чисел с плавающей точкой .
Для одномерных многочленов с комплексными коэффициентами факторизация может быть легко сведена к численному вычислению корней и кратностей многочлена .
В многомерном случае случайное бесконечно малое возмущение коэффициентов с вероятностью единица производит неприводимый многочлен , даже если исходить из многочлена со многими множителями. Таким образом, сам смысл численной факторизации должен быть точно прояснен.
Пусть — многочлен с комплексными коэффициентами с неприводимым разложением
где и множители являются неприводимыми многочленами с комплексными коэффициентами. Предположим, что аппроксимируется многочленом , коэффициенты которого близки к коэффициентам . Точная факторизация бессмысленна, так как она, как правило, неприводима. Существует несколько возможных определений того, что можно назвать численной факторизацией
Если и известны, то приближенная факторизация состоит в нахождении полинома, близкого к факторам, как указано выше. Если схема факторизации неизвестна, идентификация становится необходимой. Например, число неприводимых множителей полинома равно нулю его матрицы Рупперта. [7] Таким образом, кратности могут быть идентифицированы с помощью факторизации без квадратов посредством численного вычисления НОД и выявления ранга на матрицах Рупперта.
Было разработано и реализовано несколько алгоритмов для числовой факторизации как текущего предмета исследования. [8] [9]
Шейкер, Х. (2009). «Топология и факторизация многочленов». Math. Scand . 104 : 51–59. arXiv : 0704.3363 . doi :10.7146/math.scand.a-15084. S2CID 14121840.
{{cite journal}}
: CS1 maint: multiple names: authors list (link){{cite journal}}
: CS1 maint: multiple names: authors list (link)(доступно для читателей, имеющих степень бакалавра по математике)