Вычисление кратных сомножителей полинома многих переменных

УДК 519.688

ВЫЧИСЛЕНИЕ КРАТНЫХ СОМНОЖИТЕЛЕЙ ПОЛИНОМА МНОГИХ

ПЕРЕМЕННЫХ

© Д.С. Ивашов

Ключевые слова: вычисление кратных сомножителей; алгоритм Бейкса, алгоритм Муссера; алгоритм Юна.

Исследуются известные алгоритмы вычисления кратных сомножителей многочлена. В таблицах представлены результаты экспериментов, в которых сравнивалось быстродействие процедур реализующих алгоритмы вычисления кратных сомножителей: стандартный алгоритм, алгоритм Бейкса, алгоритм Муссера и алгоритм Юна.

1 Введение

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

Задача факторизации многочленов многих переменных была решена более 130 лет назад в работах Кропекера. Данный метод является обобщением методов Ньютона и метода, предложенного Фридрихом Шубертом (1793). Для многочленов с целыми коэффициентами появились новые более быстрые алгоритмы.

Первым алгоритмом факторизации многочлена одной переменной за полиномиальное время был алгоритм Берликемпа (1970). Алгоритм Берликемпа требует выполнения O(nw + n1+o(1)/og q) арифметических опер аций в Fq [1]. В 1981 г. Кантор и Цассенхауз предложили метод факторизации многочленов одной переменной требующий выполнения O(n2+o(1)/og q) операций в Fq. Этот метод включает в себя использование трех алгоритмов: вначале выполняется алгоритм выделения кратных сомножителей (square-free factorization), затем к каждому из полученных сомножителей применяется алгоритм выделения сомножителей с различными степенями при старшей переменной (distinet-degree factorization), в завершение к каждому сомножителю, полученному на предыдущем этапе, применяется третий алгоритм, который позволяет выделить сомножетели с одинаковыми степенями при старшей переменной (equal-degree factorization) [2].

Андеррайтер разработал новый подход к факторизации полиномов одной переменной над конечными полями со сложностью, близкой к сложности алгоритма Берликемпа [35]. Алгоритм Калтофена и Шоупа находит множители многочлена одной переменной в конечном поле за субквадратическое время. Этот метод опирается на быструю матричную арифметику и является одним из самых быстрых алгоритмов для больших конечных полей [6].

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

Калтофен и Трагер разработали алгоритм факторизации многочленов многих переменных, использующий black box представление [7].

Бернардин разработал схему факторизации многочленов многих переменных над конечными полями, состоящую из двух этапов. На первом этапе он представил новый алгоритм выделения кратных сомножителей многочлена многих переменных, при этом он опирался на алгоритм Юна, На втором этапе происходит вычисление сомножителей свободных от квадратов [8]. Эта схема факторизации была применена в системе компьютерной алгебры Мар1е,

Рассмотрим схему факторизации полиномов многих переменных Г[х\,... ,хп) над рациональными числами, состоящую из трех этапов, где в дополнение к схеме, предложенной Бернардином, мы добавили первый этап. Введение нового этапа позволяет ускорить вычисление сомножителей полинома в случае, если исходный полином содержал сомножители имеющие различные наборы переменных.

На первом этапе вычислим сомножители полинома, имеющие различные наборы переменных,

У полинома Г(х1,..., хп) может быть не более 2п сомножителей кк , которые имеют различные наборы переменных. Для этого этапа можно воспользоваться алгоритмом описанном в [9].

В результате получим Г = Лт=1 кк , где т — число сомножителей, имеющих различные наборы переменных.

На втором этапе вычислим сомножители, имеющие различную кратность,

кк = П 1 я] , где

вкг = вк] при г = ]. Множители Як] имеют такой же набор переменных, как и полипом кк. Процесс отделения таких сомножителей описан в параграфе 2, При этом, еели Я] имеет сомножители, ТО каждый ИЗ НИХ ВХОДИТ В Я] в первой степени.

На третьем этапе вычислим сомножители полинома, свободного от квадратов.

После первых двух этапов МЫ получим ПОЛИНОМЫ Як] которые не имеют кратных сомножителей и которые могут раскладываться только на взаимно простые множители. Для каждого из этих полиномов найдем множители в разложении Як] = Пр=\ 1гк]  На этом этапе найдем взаимно простые сомножители, используя алгоритм, описанный в [10]. В итоге получим Г(XI,..., Хп) = ПГ=1 кк = ПГ=1 Щ=1 Я] = ПГ=1 П=1 Ш=\ /£.

2 Выделение сомножителей, имеющих различную кратность

Цель данной работы состоит в том, чтобы сравнить быстродействие четырех известных алгоритмов вычисления кратных сомножителей и дать рекомендации по их применению, Рассмотрим четыре алгоритма выделения кратных сомножителей полинома Г(х1,... ,хп), а именно, стандартный алгоритм [11], алгоритм Бейкса [11], алгоритм Мус-сера [12], алгоритм Юна [13],

2.1 Стандартный алгоритм выделения кратных сомножителей

Рассмотрим стандартный алгоритм выделения кратных сомножителей, который широко используется на практике [11], Данный алгоритм хорошо подходит для разложения полиномов с большим числом множителей, которые находятся в относительно малых степенях.

На практике этот алгоритм предпочтительней, т, к, вероятность того, что произвольно выбранный полином имеет множители высокой кратности, приближается к нулю,

В данном алгоритме используются следующие функции,

GCD(f,g) — НОД полиномов f и д.

Number_Variable(f) — номер переменной, по которой идет дифференцирование, D(f,i) — производная полинома f то переменной x,

Рассмотрим алгоритм выделения кратных сомножителей в полиноме многих переменных.

Алгоритм Algorithm Standart_Square_Free

Input: f Є R, R = Z[x1,..., xn]

Output: result[] = fi

index := (f);

number := 0; u := D (f, index); a :=GCD(f, u);

(a = 1){

( f, u) = 1 f

result[number] := f;

}else{ a1 := f;

a

a1 = 1

g :^^D (a1,a); b := —; result[number] := b;

g

a

number := number + 1; a1 := g; a := -; } }

g

return result;

result[ ] fi i i

сиве.

Пример.

Пусть дан полином f (x1, ••• ,xn) = f1(x1, ••• ,xn )3 • f2(x1, ••• ,xn) • f3(x1, ••• ,xn)2, f1, f2, f3 —неприводимые сомножители. В качестве старшей переменной возьмем x1 и будем вычислять производные полиномов по этой переменной.

a = НОД(/,Я = fl2 • /з; al = “ V3 = fl • /2 • /з,

f l3 • /2 • /з2

f l2 • /з

Я = НОД (/2  /з,/1  /2  /з) = /1  /з.

Найдем первый сомножитель Ь1 полинома / кратности 1:

61 = /‘, /2, /3 = /Г, а = = /,; я = НОД(Л  /з,/1) = /1.

/1  /з /1  /3

Найдем второй сомножитель 62 полинома / кратности 2:

62 = = /з; а = £ = 1; Я =НОД(1,/1) = 1.

/1 /1

Найдем третий сомножитель 6з полинома / кратности 3:

6 /1 /

63 = у = /1.

Получили множители 61,62,Ьз кратноети 1, 2, 3, Таким образом, полином / можно представить в виде / = /  /2  /|.

2.2 Алгоритм Бейкса выделения кратных сомножителей

Рассмотрим алгоритм выделения кратных сомножителей полинома многих переменных, основанный на алгоритме Бейкса [11]. Данный алгоритм позволяет значительно ускорить описанный выше стандартный алгоритм в случае, когда полином имеет небольшое число сомножителей, каждый из которых входит в произведение в большой кратности. Идея заключается в последовательном дифференцировании следующим образом.

Алгоритм

Algorithm New_Square_Free

Input: f G R, R = Z[xi,..., xn]

Output: factors_f [ ] = f index := Number_Variable (f);

number := 0; д := f; ^derivative :=D (д, index);

While (^derivative = 0){ f := д;

f

д := GCD ^derivative, д); factoryf [number] := —;

д

number := number + 1; ^derivative := D (д, index); }

While (k = 0) do {

if (factors^f [k] = 1){

for (i = 1; i<k — 1; i = i + 1) do factors f [i]; = -f-~f ; }

v ' > J •/ l j> factor^f [k]’ J

k := k — 1; factor^f [];

Массив factory f [ ] содержит множители f1, ••• , fk кратностей 1, ••• , k полинома

f

Пример.

Пусть дан полином /(х1,    , хп) = /1(х1,    , хп^  /2(х1,    , хп)5 такой, что /1, /2 —

/ х1

будем вычислять производные полиномов по этой переменной.

/ = /1з  /5; я = /; я ^Д(я,я') = /2  /4.

/

f 13 • /5

f 12 • /4

out[1] = ^2 = fl • /2; f = fl2 • f4 ; g = НОД (g,g') = / • /3

р2 /4 _ •/ 1 _ «/1 ,/2 ? У _ УУчУ) — Л 72

/

/2 /4

ои*[2] = = /1  /2; / = /1  /2 ; Я ^Д(Я,Я') = /2

/1  /2

/

/1: /3 /2

out[3] = ^_^ = fl . /^ / = /22 ; g = HOfl(g,g') = /2.

/

/2

°и^[4] = = У2; / = У2; я = нод ^яО = 1

/2

/

°и^[5] = у = /2.

Среди полиномов массива ои выделим сомножители полинома /

Множитель out [5] = f2 входит в поли ном f с кратностью 5, Поделим остальные полиномы массива out па out[5]. Тогда массив out примет вид; out[1] = f1 ,out[2] = f1,out[3] = f1 ,out[4] = 1,out[5] = f2.

Множитель out[3] = f1 входит в поли пом f с кратностью 3, Поделим остальные полиномы массива out на out[3]. Тогда массив out примет вид; out[1] = 1,out[2] = 1,out[3] = f1,out[4] = 1,out[5] = f2.

В итоге получим, что полипом f = out [5]5 • out[3]3 = f3 • f|.

2.3 Алгоритм Муссера

Рассмотрим алгоритм Муссера, позволяющий вычислить кратные сомножители полинома ^(ж1,...,жп) [12].

Алгоритм

Input: f G R, R = Z[x1,...,xn]

Output: resu/t_factors[ ] = fj, resu/t_powers[ ] = Sj index := Number_Variable (f);

a := D(f, index); c := GCD (f, a); w := f; k := 1;

c

w

g; c :=

while (c = 1) do{ д :=GCD(w,c); fk := —; k := k + 1; w :=

д

fk := w;

Пример.

Пусть дан полином f (x1, ••• ,xn) = f1(x1, ••• ,xn )3 • f2(x1, • f1, f2, f3 —неприводимые сомножители, В качестве старшей переменной возьмем x1 и будем вычислять производные полиномов по этой переменной.

,Xn) • f3(Xl, • • • ,Xn)2

c = нод(/,/') = f12 • /3;

Найдем множитель кратности 1

w = —

c

f _ f l3 • /2 • /з2

fl2 • /з .

f1.

w

g = НОД (w c) = fl • f2; °ut^[1] = -

c

Найдем множитель кратности 2, g =НОД(w,c) = fl;

w

out_ [2] = — c

_ f1 • f2 • f3 fl • f3

f1 • f3

f2; w = f 1 • fз; c = -

f 12 • /з

f1 • f3

f1

= f3

/з

w

f1

g f1

Получим множитель ои£_ [3] = /1 кратности 3,

Получили множители ом£_ [1], ом£_ [2], ом£_ [3] кратности 1, 2, 3 , Таким образом, полином / можно представить в виде / = /з  /2  /|.

c

2.4 Алгоритм Юна

Рассмотрим алгоритм Юна выделения кратных сомножителей полинома [13],

Алгоритм

Algorithm Yun

Input: f G R,R = Z[x\,...,xn]

Output: result _factors[) = fi, result_powers[] = si index := Number_Variable (f);

fa

a :=D (f,index); c :=GCD(f,a); w := —; v := -;

cc

u := v D (w, index); k := 1; j := 0; while (u = 0) do{

g := GCD (w,u);

if (g = 1){ result _factors[j] := g; result _power s[j] := k; j := j + 1; } wu

k := k + 1; w := —; v := —; u := v—u (w, index); } gg

result_factors[j] := w; result_powers[j] := k; return result_factors, result^powers.

3 Вычислительные эксперименты

В системе компьютерной алгебры Mathpar имеются процедуры, реализующие алгоритмы вычисления кратных множителей: стандартный алгоритм, алгоритм Бейкса, алгоритм Муссера и алгоритм Юна, Эти процедуры реализованы на языке Java,

Были проведены серии экспериментов, в которых сравнивалось быстродействие этих процедур, В экспериментах использовался компьютер Intel(R) Core(TM)2 Duo Т4200, 2,00GHz, 2 Гбайта ОЗУ, ОС Linux Ubuntu 11,04,

Ниже в табл. 1-5 мы используем следующие обозначения. Обозначим через S — стандартный алгоритм, BS — алгоритм Бейкса, М — алгоритм Муссера, Y — алгоритм Юна, В табл. 1-5 приведено время выполнения процедур выделения кратных сомножителей в секундах.

Эксперимент 1, В эксперименте использовался полипом F(x) = f (x)ni, ще f (x) — линейный полином с 5-разрядными коэффициентами, В процессе эксперимента изменялись следующие параметры: ni — кратность поли нома f (x), использовались значения 100, 200, 500, 1000, 1500, 2000.

Таблица 1

Время вычисления кратных сомножителей с использованием стандартного алгоритма, алгоритма Бейкса, алгоритма Муссера и алгоритма Юна

F (x) = f (x)ni

Пі s BS M Y

100 0.5 0.48 0.5 0.115

200 1.3 1.26 1.29 0.17

500 2.8 1.8 2.95 0.38

1000 12.29 3.67 13.95 1.05

1500 38.6 8.39 43.8 2.15

2000 94.26 18.09 102 5.57

Алгоритм Юна быстрее остальных алгоритмов, причем при возрастании кратности щ полинома f (х) возрастает и разница. Например, при Пг = 100 алгоритм Юна быстрее

стандартного алгоритма в 4.3 раза, а при щ = 2000 в 16.9 раза. Если сравнивать стандартный алгоритм и алгоритм Бейкса, то из табл. 1 видно, что при увеличении кратности алгоритм Бейкса быстрее при щ = 500 в 1.5 раза, а при щ = 2000 — в 5.2 раза.

Эксперимент 2, В эксперименте использовался полином ^(ж) = /^ж)”/2(ж)”', где /^ж), /2(ж) — линейные полиномы с 5-разрядными коэффициентами, В процессе эксперимента изменялись следующие параметры: щ,щ — кратности сомножителей /1(ж),/2(ж) соответственно, использовались значения: щ = {100,150, 200, 500,1000} , щ = {150,200,250,700,1500} .

Таблица 2

Время вычисления кратных сомножителей с использованием стандартного алгоритма, улучшенного стандартного алгоритма, алгоритма Муссера и алгоритма Юна

Р (ж) = /і(ж)п /2(ж)га;

Пі, Пу э ВЭ М У

100, 150 1.4 1.39 1.4 0.25

150, 200 1.9 1.66 1.8 0.34

200, 250 2.4 1.95 2.35 0.45

500, 700 21 7.6 20.8 1.97

1000, 1500 183 51 183 16

Из табл. 2 видно, что алгоритм Юна выигрывает у остальных алгоритмов, причем при щ = 100, щ = 150 выигрыш составляет 5.6 раза. При щ = 1000, щ = 1500 разница между алгоритмом Юна и алгоритмом Бейкса составляет 3.1 раза. Таким образом при увеличении кратности сомножителей постепенно разница между алгоритмом Бейкса и алгоритмом Юна уменьшается.

Эксперимент 3, В эксперименте использовался полином Р(ж) = /і(ж)Пі /2(ж)га5' /3(ж)Пгі , где /і(ж), /2(ж), /3(ж) — линейные полиномы с 5-разрядными коэффициентами, В процессе эксперимента изменялись следующие параметры: щ,иу, п — кратности сомножителей /1 (ж), /2(ж), /3(ж) соответственно, использовались значения: пі = {100, 400, 700}, щ = {200, 500,800} , п = {300, 600,900}.

Таблица 3

Время вычисления кратных сомножителей с использованием стандартного алгоритма, алгоритма Бейкса, алгоритма Муссера и алгоритма Юна

Р (ж) = /і(ж)Пі /2 (ж)п /з(ж)п

<0 Й й й э вэ М У

100, 200, 300 3.16 2.1 3.15 0.59

400, 500, 600 27.9 9 28.1 3.24

700, 800, 900 ИЗ 35.4 117 13.6

Из табл. 3 видно, что алгоритм Юна выигрывает у остальных алгоритмов. Например, при щ = 100, щ = 200, щ = 300 алгоритм Юна быстрее улучшенного стандартного алгоритма в 3.6 раза, а при щ = 700, щ = 800, щ = 900 — в 2.6 раза. Таким образом, разница между этими алгоритмами уменьшается при увеличении числа сомножителей и увеличения их кратностей.

Эксперимент 4, В эксперименте использовался полином ^(ж) = П1=1 /(ж)”' > где /г (ж) — линейные полиномы с 5-разрядными коэффициентами, В процессе эксперимента изменялись следующие параметры: щ — кратность сомнож ителей /1(ж),/2(ж), ••• ,/1о(ж) соответственно, использовались значения: щ = {20, 30, 50,100} ,

Таблица 4

Время вычисления кратных сомножителей с использованием стандартного алгоритма, алгоритма Бейкса, алгоритма Муссера и алгоритма Юна

ж) д I 1 II с ( ж) '"з

иг э вэ М У

20 0.67 0.89 0.65 0.25

30 1.03 1.2 1 0.4

50 1.35 1.9 1.35 0.45

100 3.78 9.6 3.71 0.65

Из табл. 4 видно, что алгоритм Юна выигрывает у остальных алгоритмов, причем при nj = 20 выигрыш составляет 2.6 раза, а при = 100 выигрыш составляет 5.7 раза. Таким образом, при увеличении кратности сомножителей разрыв по быстродействию между алгоритмом Юна и остальными алгоритмами увеличивается.

Эксперимент 5. В эксперименте использовался полипом ^(ж) = П^=1 /г(ж)^ , где /г (ж) — полипом с 5-разрядными коэффициентами. В процессе эксперимента изменялись следующие параметры: йедхР(ж) = 5 — максимальная степень переменной ж; N — число сомножителей многочлена; Ь/ = (в1, ••• ,вк) — кратности сомножител ей, т.е. вг — кратность г-ого сомножителя; р1 = 100 %,р2 = 50 % — плотности многочлена.

Таблица 5

Время вычисления кратных сомножителей с использованием стандартного алгоритма, алгоритма Бейкса, алгоритма Муссера и алгоритма Юна

N Ь/ Плотность 50 % Плотность 100 %

8 ВЭ м У 8 ВЭ М У

1 16-32 0,25 0,32 0,22 0,055 0,3 0,55 0,32 0,09

64-128 1,67 2,3 1,61 0,33 1,8 4,6 1,8 0,62

512-1024 250 700 240 10,5 260 1380,5 225 19

3 16-32 1,5 3,3 1,4 1,37 1,9 5,65 1,8 1,4

3 64-128 82 1113 81 67 167 2188 188 126

5 16-32 23,2 110 23 22,5 101,2 381 97,2 96

Из табл. 5 видно, что алгоритм Юна выигрывает у остальных алгоритмов. Можно отметить, что стандартный алгоритм быстрее алгоритма Бейкса в случае, если полином не состоит из линейных сомножителей, причем чем больше degj.fi тем больше разница во времени вычислений у этих двух алгоритмов.

4 Заключение

Эксперименты проводились с полиномами от одной переменной, при этом использовались сомножители большой кратности.

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

1. Berlekamp E.R. Factoring polynomials over large finite fields // Math. Comp. 1970. V. 24. P. 713-735.

2. Cantor D.G., Zassenhaus H. A new algorithm for factoring polynomials over finite fields // Mathematics of Computation. 1981. V. 36. P. 587-592.

3. Niederreiter H. A new efficient factorization algorithm for polynomials over small finite fields // Applic. Algebra Engin. Commun. Comput. 1993. V. 4. P. 81-87.

4. Niederreiter H., Gottfert R. Factorization of polynomials over finite fields and characteristic sequences // Journal of Symbolic Computation 16. 1993. P. 401-412.

5. Niederreiter H. Factorization of polynomialas and some linear-algebra problems over finite fields // Linear Algebra and its Applications. 1993. V. 192. P. 301-328.

6. Kaltofen E., Shoup V. Subquadratic-time factoring of polynomials over finite fields //In Proceedings of the 27th Annual ACM Symposium on the Theory of Computing. 1995. P. 398-406.

7. Kaltofen E., Ъ-адег B.M. Computing with polynomials given by black box for their evaluations: Greatest common divisors, factorization, separation of numerations and denominators. // Journal of Symbolic Computation 9. 1990. P. 300-320.

8. Bernardin L. Factoring multivariate polynomials over a finite field // Diss. 1999.

9. Ивашов Д. С. Факторизация полиномов многих переменных // Вестник Тамбовского университета. Серия Естественные и технические науки. Тамбов, 2011. Т. 16. Вып. 1. С. 133-137.

10. Малашонок Г.И., Ивашов Д. С. Об алгоритме факторизации полиномов многих переменных // Вестник Тамбовского университета. Серия Естественные и технические науки. Тамбов, 2010. Т. 15. Вып. 1. С. 331-334.

11. Backes М. Factorization of Univariate Polynomials // Dissertation. Universitat des Saarlandes, 2002.

12. Musser D.R. Algorithms for Polynomial Factorization // PhD thesis, University of Wisconsin. 1971.

13. Yun D. Y. Y. On square-free decomposition algorithms //In SYMSAC ’76:Proceedings of the 1976 ACM Symposium on Symbolic and Algebraic Computation. 1976. P. 26-35.

БЛАГОДАРНОСТИ: Работа выполнена при поддержке гранта РФФИ .№ 12-07-00755-а, Поступила в редакцию 20 декабря 2012 г.

Ivashov D.S. SQUARE-FREE FACTORIZATION POLINOMIALS OF MANY VARIABLES.

We discuss known algorithms for square-free factorization of polynomials of many variables.

Key words: square-free factorization, standart square-free, Backes square-free, Musser, Yun.