УДК 519.688
ПАРАЛЛЕЛЬНЫЙ АЛГОРИТМ РАЗЛОЖЕНИЯ МНОГОЧЛЕНОВ НА МНОЖИТЕЛИ С РАЗЛИЧНЫМИ НАБОРАМИ ПЕРЕМЕННЫХ
© Д.С. Ивашов
Ключевые слова: факторизация многочленов; алгоритм вычисления сомножителей с различными наборами переменных; параллельные вычисления; компьютерная алгебра. Рассматривается алгоритм разложения многочленов с целочисленными коэффициентами на сомножители, имеющие различные наборы переменных. Предлагается схема распараллеливания представленного алгоритма. Приводятся результаты экспериментов для последовательных и параллельных алгоритмов.
1 Введение
Алгоритм факторизации многочленов от многих переменных впервые появился более 130 лет назад в работах Кронекера [1]. Начиная с 60-х годов XX века в области факторизации многочленов появились новые более эффективные и быстрые алгоритмы, пригодные для практической реализации.
Первым алгоритмом факторизации многочленов от одной переменной, работающим за полиномиальное время, был алгоритм Берликемпа [2], требующий выполнения 0(пш + п1+0^Чод р) арифметических операций в конечном поле Рр , состоящем из р элементов, где го — экспонента матричного умножения.
В 1975 году Ванг и Ротшильд представили алгоритм факторизации многочленов от многих переменных с целочисленными коэффициентами [3], который имеет меньшую сложность, чем алгоритм Кронекера, и пригоден для практической реализации.
В 1981 году Кантор и Зассенхауз предложили метод факторизации многочленов от одной переменной с целочисленными коэффициентами [4], который существенно лучше, чем алгоритм Берликемпа, и требует выполнения О(п2+о(1^1од р) арифметических операций в поле .
В 1998 году Калтофен и Шоуп разработали алгоритм факторизации многочленов от одной переменной для полей [5], чей размер не превышает степень исходного многочлена. Этот метод опирается на быструю матричную арифметику и на сегодняшний день является самым эффективным для больших конечных полей. Алгоритм Калтофена и Шоупа «малый шаг / большой шаг» требует выполнения 0(п(ш+1)/2 + п1од р) арифметических операций в поле .
В 2009 году Монаган и Джавади представили новый алгоритм факторизации многочленов над алгебраическими полями [6]. Их алгоритм использует подъем Гензеля 558
и обобщение EEZ алгоритма Ванга, который был разработан для разложения над полем .
В настоящей статье продолжается исследование алгоритмов факторизации многочленов многих переменных с целыми коэффициентами.
Пусть Р(х\,...,хп) — многочлен от п переменных XI,... ,хп с целочисленными коэффициентами. Будем предполагать, что НОД числовых коэффициентов многочлена F(a:l,..., хп) равен 1.
Во многих статьях [1,7,8] предлагается схема факторизации полиномов, состоящая из двух этапов. На первом этапе вычисляются кратные сомножители, на втором этапе вычисляются сомножители свободных от квадратов многочленов.
Рассмотрим схему факторизации многочлена -Р(жх,..., хп), состоящую из трех этапов [9-12], в которой на первом этапе используется новый алгоритм, позволяющий вычислить сомножители, имеющие различные наборы переменных. Введение нового этапа позволяет уменьшить время вычисления сомножителей.
Схема факторизации многочленов многих переменных.
Этап 1. Вычисление сомножителей /ъ • • •, /2п-1 > имеющих различные наборы переменных:
...,Хп)= Л(®1) • /2(Ж2) • . . . • /2«-1(®1, • • • ,жп).(1)
Этап 2. Вычисление кратных сомножителей /гг? многочленов /*:
/. = ПЛ«'
3=1
где г = 1,..., 2П — 1, ву — кратность j -го сомножителя и ву ф вц, при 3 ф к .
Этап 3. Вычисление неприводимых сомножителей многочленов :
Гк
hJij 11 ■
к= 1
В результате многочлен F(ж \,... ,хп) можно представить в виде
2П—1 2П—1 п 2П—1 п гк
Е(хъ...,хп)= П/;= ППЛ3#= ППГЫД
г=1 г=1 _7=1 г=1 ]=\ к=1
Далее рассмотрим подробно последовательный и параллельный алгоритмы вычисления сомножителей, имеющих различные наборы переменных. В параграфе 2 предлагается новый алгоритм поиска сомножителей с различными наборами переменных и проводится экспериментальное сравнение разработанных алгоритмов с аналогичными алгоритмами, реализованными в системах компьютерной алгебры МаЛета^са и Мар1е. В параграфе 3 предлагается схема распараллеливания алгоритма поиска сомножителей с различными наборами переменных, на основе которой были разработаны параллельные программы. В параграфе 4 экспериментально исследуется эффективность полученных параллельных программ.
Разработанные последовательные и параллельные алгоритмы были программно реализованы в веб сервисе МаШРаН;пег [13]-[15]. Эксперименты с параллельными программами проводились на кластере МУЭЮОк Межведомственного Суперкомпью-терного Центра РАН и в центре коллективного пользования Института Системного Программирования РАН.
2 Разложение многочленов на множители, имеющие различные наборы переменных
Пусть F(:r 1,..., хп) 6 Ъ[х\,..., ж„]. У многочлена Р(хх,..., хп) может быть не
более чем 2” — 1 сомножителей /*, которые имеют различные наборы переменных: 2п-1
^(ж1,..., хп) = П /г. При этом сомножителей, имеющих р различных переменных
г=1
Алгоритм вычисления сомножителей /і многочлена , хп).
Шаг 1. Отделение сомножителя, не содержащего переменную ж і .
Представим многочлен F(xl,..., хп) в виде многочлена от переменной хг с коэффициентами из Ъ[х2,...,хп]:
где к = degxlF(x 1,..., хп). Вычислим НОД полиномиальных коэффициентов gi:
Многочлен /1(^2,..., хп) не содержит переменную х\ и является сомножителем многочлена Р{х 1,..., хп). После деления исходного многочлена ^(^1,..., хп) на /1(2:2, ■ ■ •, хп), получим второй сомножитель /2(3:1, • • ■, хп) многочлена F .
В результате шага 1 получим два сомножителя исходного многочлена -Р(ж1,..., хп), ОДИН ИЗ которых не содержит переменную Х\ : -Р(ж 1, Хп) = /1(^2, . . • , хп)-/2(х\, ..., жп).
Для каждого из полученных многочленов будем продолжать этот процесс для переменных Х2, х3, ..., х3.
Шаг в+1. Отделение сомножителя, не содержащего переменную ж5+1.
На предыдущих этапах мы можем получить не более 2я сомножителей, имеющих различные наборы переменных. В каждом из этих многочленов попробуем выделить сомножитель, не содержащий переменную Х5+1 . Для этого в каждом из многочленов, полученных на предыдущих шагах, найдем НОД полиномиальных коэффициентов при неизвестной ж8+1 и разделим соответствующий многочлен на вычисленный НОД. Общее число полиномиальных сомножителей может при этом в худшем случае удвоиться.
Таким образом, завершив этот процесс на последней переменной хп, получим в худшем случае 2П — 1 сомножителей.
из п, может быть не более чем
к
i=0
/і(ж2, • • • ,ХП) = GCD(g0(x2, ...,хп),..., дк(х2,хп)).
Алгоритм
Algorithm FactorizationDifSetVar (F)
Input: F € Z[xi,... ,xn\
Output: массив сомножителей factors = {/1, /2, • • •, /2n-i} factors[0] := F; h := 1; m := 1;
for (i := 0 to n) do{
for (j := 0 to К) do{
к = degXif actors[j];
к
f actors[j] = 9sxsi ;
s=о
first := GCD(g0, gi, ...,gk)]
if (first ф1){ factors[m] := factors[j]/first \ factors[j] := first; m + +; }
}
h := m } return factors;
Разработанный алгоритм был программно реализован в веб сервисе MathPartner [13]-[15]. Доступ к системе Mathpar осуществляется на сайте (http://mathpar.com).
С разработанной программой были проведены эксперименты. В экспериментах использовался многочлен вида F(x,y) = f\{x) ■ /2(х, y)Vl■ /3(х,у)Р2, где /* — линейные многочлены со 100-разрядными коэффициентами, г = 1,2,3. Результаты экспериментов представлены В таблице 1, В которой 2П~1 ^ Pl,T>2 < 2", tMathpar — время вычисления В системе Mathpar , tMathematica ~ ВрвМЯ ВЫЧИСЛвНИЯ В СИСТвМв Mathematica 7.0 , ^м«р/е — время вычисления в системе Maple 15 .
Таблица 1
Время вычислений с использованием алгоритма факторизации многочленов вида F(x, у) — fi(x) ■ h(x,y)Pl' hix,y)V2 в системах Mathpar, Мathematica 7.0 и Maple 15
п PUP2 ^ Mathpar t М athematica t Maple t Мathematica t Maple
Г Mathpar t Mathpar
3 4-8 0.02 с 0.05 с 0.15 с 2.5 7.5
4 8-16 0.04 с 0.17 с 0.48 с 4.2 12
5 16-32 0.05 с 0.82 с 1.63 с 16.4 32.6
6 32-64 0.1 с 4.22 с 7.44 с 42.2 74.4
7 64-128 0.22 с 22.7 с 42.24 с 103.1 192
8 128-256 0.9 с 144 с 293 с 160 325
Эксперименты показали, что алгоритмы факторизации для многочленов вида Р(х, у), реализованные в системе МаЬНраг быстрее, чем аналогичные в системе МаШетаИса 7.0 и Мар1е 15. Например, для п = 8 МаШраг быстрее в 160 и 325 раз соответственно.
Мы не рассматриваем всевозможные типы многочленов. Тем не менее, мы представляем такие эксперименты, которые демонстрируют важность нового первого этапа, который позволяет значительно улучшить алгоритм факторизации.
3 Параллельный алгоритм разложения многочленов на множители, имеющие различные наборы переменных
Пусть F(x 1,...,хп) — многочлен от п переменных Xi,... ,хп с целочисленными коэффициентами. Вычислим разложение (1). Пусть имеем кластер с h процессорами с номерами 0,1,... ,h — 1. Назовем нулевой процессор корневым, на него подается многочлен F(x 1,... ,хп) и на нем будет сформирован результат. Пусть на каждом процессоре имеется множество М, содержащее необходимый набор простых чисел.
Параллельный алгоритм разложения многочленов на множители, имеющие различные наборы переменных, состоит из четырех этапов.
Этап 1. Вычисление количества простых модулей.
Корневой процессор посылает исходный многочлен F(x\,... ,хп) на все процессоры кластера.
Процессоры с номерами 1,..., h — 1 принимают многочлен F(xi,..., хп).
Каждый процессор находит наибольший по абсолютной величине числовой коэффициент г исходного многочлена F(x\,..., хп) и по заданному множеству числовых модулей М вычисляет необходимое для данной задачи количество к простых модулей nrii G М таким образом, чтобы г < rrii ■ т2 ■ ■ гпк .
Обозначим через и остаток от деления к на h.
Процессор с номером 0,1,..., xi—1 выбирает для решения задачи |_|J +1 простых модулей.
Процессор с номером и, и+1,..., h — 1 выбирает для решения задачи простых модулей.
Задача равномерно распределяется по процессорам кластера, так как количество простых модулей отличается, не более чем на один.
В результате первого этапа на каждом процессоре будет получен исходный многочлен F(x 1, ... ,хп) и список простых числовых модулей.
Этап 2. Вычисление сомножителей многочлена F(x\, ...,хп) в конечном поле.
Каждый процессор должен ВЫЧИСЛИТЬ сомножители fia многочлена F(x I, ... ,хп) по каждому из выбранных на предыдущем этапе простому модулю, где г — 1,... ,s . Для вычисления сомножителей fia в конечном поле используется алгоритм описанный в параграфе 2.
Если на j -ом шаге алгоритма, где j = 1,... ,п будет получено два сомножителя, то один из этих сомножителей и соответствующий простой модуль, посылаются свободному процессору.
Каждый процессор, получивший многочлен и простой модуль, продолжает вычисление и распределение сомножителей по свободным процессорам согласно алгоритму параграфа 2.
После выполнения гг-го шага алгоритма из параграфа 2 каждый процессор посылает вычисленные сомножители по каждому из простых модулей корневому процессору. Корневой процессор принимает сомножители fia многочлена F(xi,... ,хп) по простым модулям т\, т2, ■ ■ ■, тк ■
В результате второго этапа на корневом процессоре будет получено:
{F(x 1,... ,хп) = /ц • /21 • ... • fsi (mod m-x);
F(x 1,..., хп) = /12 • /22 ■ • • • • fs2 (mod m2); ^
F(x 1,..., xn) = fik ■ f2k ■ ■ ■ ■ • U (mod mk).
Этап 3. Восстановление сомножителей fia многочлена F(x\,хп) в исходном кольце.
Корневой процессор разбивает систему (2) на s блоков. В t-й блок входят полиномиальные остатки fn, fi2,..., fik : fi mod тг = fa,..., mod mk = fik .
Обозначим через w остаток от деления s на h.
Корневой процессор передает +1 блоков на процессоры с номерами 0,1,, w—
1, [|J блоков на процессоры с номерами w,w + 1,... ,h — 1.
Блоки равномерно распределяются по процессорам кластера, так как их количество отличается не более чем на один.
Каждый процессор, получив список блоков, должен восстановить из них сомножители fi, где г = 1,... s, исходного многочлена F(xi,..., хп).
Для каждого блока составляется матрица коэффициентов Д , содержащая к строк, где г = В первой строке матрицы Аг будут располагаться коэф-
фициенты многочлена fn , во второй строке — коэффициенты многочлена fa и т.д. Равномерно распределим столбцы матрицы Аг по свободным процессорам.
Каждый процессор, получив столбец одной из матриц Аг, восстанавливает по нему соответствующий коэффициент одного из сомножителей. Для восстановления числового коэффициента используется алгоритм Ньютона.
В результате третьего этапа на процессорах кластера будут получены коэффициенты сомножителей fi, где г = 1,..., s .
Этап 4. Сбор результата вычисления на корневом процессоре.
Каждый процессор передает корневому процессору восстановленные числовые коэффициенты.
Корневой процессор принимает числовые коэффициенты и формирует сомножители fi, где г = 1,..., s.
В результате на корневом процессоре будет получено разложение (1) исходного многочлена F(xi,..., хп).
4 Результаты вычислительных экспериментов с параллельными программами
Представленная выше схема параллельного алгоритма была программно реализована на языке Java с использованием библиотеки MPI и протестирована на кластере MVSlOOk Межведомственного суперкомпьютерного центра РАН.
В экспериментах использовался фиксированный многочлен F(x,y,z) = f\(x) • т ■ fl(z) ■ Д(х,у) ■ fi{x,z) ■ fl(y, z) ■ fj(x,y,z), где fi — неприводимые многочлены со 100-разрядными коэффициентами, в которых старшая степень по каждой переменной равна 2, г = 1,... 7.
Результаты экспериментов представлены в табл. 2. В таблице ускорение Sn показывает, во сколько раз быстрее происходят вычисления на п процессорах по сравнению с вычислением на одном процессоре и определяется по формуле: Sn = t\/tn, где tn — время вычисления на п процессорах. Эффективностью Еп параллельного алгоритма называется величина, определяемая по формуле: Еп — (Sn/n) * 100%.
Таблица 2
Время, ускорение и эффективность параллельной программы факторизации многочленов
Количество процессоров, n 1 2 4 8 16 32
Время, с 2819 1429 752 379 202 113
Ускорение Sh 1.97 3.75 7.5 14 25
Эффективность Eh, % 98.6 94 93 87.2 78
Данные таблицы 2 отражены на рис. 1 и 2. На рис. 1 представлен график зависимости времени вычисления сомножителей, имеющих различные наборы переменных, от количества процессоров. На рис. 2 представлен график ускорения вычислений на п процессорах по сравнению с одним процессором. Дополнительно проведены две прямые линии. Верхняя линия соответствует ускорению в 100 %, нижняя линия соответствует ускорению в 50 %. Считается, что задача хорошо масштабируется, если ускорение находится в пределах от 50 до 100 %.
1 (с)
Рис. 1. Время вычисления сомножите- Рис. 2. Ускорение вычислений на п пролей полинома, имеющих различные на- цессорах по сравнению с одним процес-боры переменных сором
Результаты экспериментов показали, что эффективность рассматриваемого алгоритма находится в пределах от 78 до 99 %. Наилучшее ускорение достигается, если количество простых модулей, необходимое для решении задачи, кратно количеству процессоров.
ЛИТЕРАТУРА
1. Панкратьев Е.В. Компьютерная алгебра. Факторизация многочленов. М.: Изд-во Моск. унта, 1988.
2. Berlekamp E.R. Factoring polynomials over large finite fields // Mathematics of Computation. 1970. V. 24. P. 713-735.
3. Wang P.S., Rothschild Factoring multivariate polinomials over the integers // Mathematics of Computation. 1975. V. 29. P. 935-950.
4. Cantor D.G., Zassenhaus H. A new algorithm for factoring polynomials over finite fields // Mathematics of Computation. 1981. V. 36. P. 587-592.
5. Kaltofen E., Shoup V. Subquadratic-time factoring of polynomials over finite fields // Mathematics of Computation. 1998. V. 67. P. 398-406.
6. Monagan М., Javadi S. On factorization of multivariate polinomials over algebraic number and functions fields // ISSAC’09. 2009. P. 199-206.
564
7. Bernardin L. Factorization of multivariate polinomials over finite fields // PhD thesis. Swiss Federal Institute of Technology. 1999.
8. Backes M. Factorization of univariate polynomials // PhD thesis. University Saarbriicken. 2002.
9. Малашонок Г.И., Ивашов Д. С. Об алгоритме факторизации полиномов многих переменных // Вестник Тамбовского университета. Сер. Естественные и технические науки. Тамбов, 2010. Том 15. Вып. 1. С. 331-334.
10. Ивашов Д. С. Факторизация полиномов многих переменных // Вестник Тамбовского университета. Сер. Естественные и технические науки. Тамбов, 2011. Том 16. Вып. 1. С. 133-137.
11. Ивашов Д. С. Об алгоритме факторизации полиномов многих переменных // Вестник Тамбовского университета. Сер. Естественные и технические науки. Тамбов, 2012. Том 17. Вып. 2. С. 591-597.
12. Ивашов Д. С. Вычисление кратных сомножителей полинома многих переменных // Вестник Тамбовского университета. Сер. Естественные и технические науки. Тамбов, 2013. Том 18. Вып. 4. С. 1207-1216.
13. Малашонок Г.И. Компьютерная математика для вычислительной сети // Вестник Тамбовского университета. Серия Естественные и технические науки. Тамбов, 2010. Том 15. Вып. 1. С. 322-327.
14. Malaschonok G.I. Project of Parallel Computer Algebra // Tambov University Reports. Series: Natural and Technical Sciences. Tambov, 2010. V. 15. Issue. 6. P. 1724-1729.
15. Малашонок Г.И. Руководство по языку «MATHPAR»: учебное пособие. Тамбов: Издательский дом ТГУ им. Г.Р. Державина, 2013.
БЛАГОДАРНОСТИ: Работа выполнена при поддержке гранта РФФИ № 12-07-00755-а.
Поступила в редакцию 25 декабря 2013 г.
Ivashov D.S. PARALLEL ALGORITHMS FACTORIZATIONOF POLINOMIALS WITH DIFFERENT SETS OF VARIABLES.
We discuss algorithm for the decomposition of polynomials with integer coefficients on the factors having different sets of variables. The scheme presented algorithm parallelization. Experimental results for sequential and parallel algorithms.
Key words: factorization of polynomials; an algorithm for calculating the factors with different sets of variables; parallel computing; computer algebra.
Ивашов Дмитрий Сергеевич, Тамбовский государственный университет имени Г.Р. Державина, г. Тамбов, аспирант кафедры математического анализа, e-mail: [email protected].
Ivashov Dmitry Sergeevich Tambov State University named after G.R. Derzhavin, Postgraduate Student of Mathematical Analysis Department, e-mail: [email protected].