Научная статья на тему 'Быстрые алгоритмы деления полиномов'

Быстрые алгоритмы деления полиномов Текст научной статьи по специальности «Математика»

CC BY
699
94
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Быстрые алгоритмы деления полиномов»

1пУ = (20,31,62,43) (44,405,2б,27) (48,—19,0|о,1ц)

(—112,413,014,115) (116,317,318,219) (42о, 1221,122,2гз)

(424,— 125,026,127) [— 128,0г9,0зо. 131 ] (~ 132,4зз,034,135)

[0зб,-1 37,0з8, 139] (440,-141,042,143) (444,-145,046,147)

(1481^49,250,251) (452,-153,054,255) [056,057,158,259]

С/У= 20,3„102,5з.

Здесь компоненты векторов пронумерованы и сгруппированы в блоки. Концевые блоки обозначены квадратными скобками, заголовки бидеревьев выделены жирным шрифтом. Например, из заголовка (20,31,62,4з) следует, что переменная у имеет второй номер, старшая степень по у в двоичной записи имеет 3 разряда, суммарное число двоичных разрядов для записи старших степеней по * и у равно 6, всего у полинома 4 монома.

Отметим некоторые свойства данного формата. Если из корневой вершины исходят оба ребра, то все блоки, соответствующие вершинам, путь к которым лежит через левое ребро, располагаются в 1пУ, начиная с относительного адреса 4, а после них в старшей части 1п V располагаются все блоки, соответ-

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

В примере из корневой вершины исходят оба ребра, поэтому левая часть (2хь + 3х)уь находится с адреса 8 по 39, а правая часть (1 Ох3 + 5х2)уі - с адреса 40 по 59. Таким же свойством обладает и вектор коэффициентов: коэффициенты для левой части располагаются по адресам 0 и 1, а для правой части - 2 и З.На этом свойстве информационного вектора основано деление бидерева пополам.

Если векторы InV и CJV имеют по lengthlnV и lenghtCjV компонент, соответственно, и {left, right, пит, *)

- запись в корневом блоке, то левая часть Бидерева расположена в InV по абсолютным адресам от 8 до {right + 3), а ее коэффициенты расположены в CJV с адреса 0 до {пит - 1); правая часть Бидерева расположена по абсолютным адресам от {right + 4) до {lengthlnV - 1), а ее коэффициенты - с пит до {lenghtCfV - 1).

БЛАГОДАРНОСТИ: Работа частично финансировалась грантами Министерства образования РФ № Е02-2.0-98 и «Научный потенциал» 23-03-24.

БЫСТРЫЕ АЛГОРИТМЫ ДЕЛЕНИЯ ПОЛИНОМОВ

© М.С. Зуев

История быстрых алгоритмов умножения имеет сегодня обширную библиографию, и крайне мало работ посвящено быстрым алгоритмам деления (см. [2-4]). Например, в известной монографии Д. Кнута [1] упоминаются только стандартные алгоритмы деления. Все больший интерес к быстрым алгоритмам связан с параллельными вычислительными системами. В данной работе приводится быстрый алгоритм деления, ориентированный на параллельную рекурсивную дихотомическую реализацию с использованием быстрого умножения по Карацубе.

1. БЫСТРЫЙ АЛГОРИТМ КОРОТКОГО УМНОЖЕНИЯ

Пусть Л - коммутативная область,/и g- полиномы из Л[лс]. Для натурального п младшую часть произведения/^ степени п - 1 назовем коротким произведением и обозначим {[g)„:

(fg)n =/^тоАх".

Пусть с^(/) = = п - 1. Возьмем рациональ-

ное число Р из интервала [0,5; 1] и разобьем полиномы / и § на старшую и младшую часть: / = /] -х^" + /2 -=/з -х" "Р)" +/4, £ = g\ -*р" +gг=gз •*<1 “Р)" + gi■ Тогда (fg)„ = Р шо<1 х", где

Р = ^"(СА'ЫлО -р>+ (Л'&Оло -р>) +/г ^gг■ (1)

J ,87 і

0 8

\

\ 8,7 Q.6E

■■ - - t 8,6 Л - 1.55 8,5

г 4

0 2* 2*+|

Рис. 1. Результаты экспериментальных исследований лучших значений (3 для алгоритма умножения Карацубы

Это равенство дает рекуррентную схему для вычисления короткого умножения {[g)„.

Если применяется стандартный алгоритм умножения, то наилучшим значением р является 0,5, при этом для короткого умножения требуется вдвое меньше операций над коэффициентами, чем для полного умножения. В общем случае лучшее значение для р может быть другим. Результаты экспериментальных исследований лучших значений р для алгоритма умножения Карацубы представлены на рис. 1. По горизонтальной оси отложены значения п в интервале [2к, 2*+|], по вертикальной оси - выигрыш по сравнению с ис-

пользованием полного умножения. Приведенные графики получены для значений Р = 0,5, 0,55, 0,6, 0,65, 0,7,

0,75, 0,8, 0,85, 0,875. Графики практически не меняются при изменении и в некоторых случаях можно получить выигрыш в 2,8 раза по сравнению с Р = 0,5. Для Р = 0,5 сложность короткого умножения совпадает со сложностью полного умножения.

В общем случае, когда с1е£/> deg g = п— 1, задача сводится к последовательным вычислениям полных и коротких произведений полиномов/§■, где/представлена В виде суммы/= д=о /кхк", 5 = [(<1е§/ + 1)/и].

Обозначим (/g)" старшую часть/■%, такую, что/# = ([%)р-„ + хГ”([g)", где p = deg(fg) + 1 . Задача вычисления ([g)n сводится к предыдущей с помощью инволюции / (х) —> хіщ^х> ]{1/х), которая меняет местами старшую и младшую части.

2. АЛГОРИТМ ДЕЛЕНИЯ

Пусть И - поле, заданы полиномы є Щх] и надо найти д,г є Щх], такие, что/ = q■g + г и г < с1е£ g .

Алгоритм 1. (с!е§/= 2п - 2, g = п - 1, п = 2к).

Пусть полиномы/и g разбиты на части/=/ -х" +/,

g = g^■x"/2+g2■

1. Разделим старшие части:/ = §і + г\.

2. Умножим и вычтем:/ =/-(/] -Гі)х" -g2^д\ ■х!'12.

3. Старшую часть (/’)"“ разделим на (/)"”' = = g\■q2 + гг-

4. Остаток от деления/на £.г =/ - (([’)" ' - г2)-х"/2 -- <?2 й-

5. Частное от деления/на^: </ = <7гх + д2.

Оценим вычислительную сложность этого рекурсивного алгоритма в числе мультипликативных операций над Л:

РО(п) = 2ГО(л/2) + 2^М(и/2),

где F^)(/г) - сложность деления, РМ(п) - сложность умножения. Полагая РМ(п) = па и Р'В(п) = с-па, найдем с = 1/(2“ 1 - 1).

Теорема. Если сложность алгоритма умножения FA/(и) = па, то сложность алгоритма 1 для деления составляет

РО(п) = 1/(2“-' - 1) РМ(п).

В частности, если используется классический алгоритм умножения, то FD(и) =РМ{п), если используется алгоритм Карацубы, то №(«) = 2РМ(п).

Алгоритм 2. (ёе§ g < < 2&е% £).

1. Если ёе§ g = 2" — 1, то/дополняем нулями до

степени 2 - 2 и применяем Алгоритм 1.

2. Если 2" - 1 < ёе§ g < 2"+1 - 1, то для полиномов /х1 и g■x\ где / = 2"+' -1 - с1е§ g, задача деления сводится к случаю 1.

В результате получим частное с/ и остаток г х\ где с/ и г являются искомым частным и остатком.

Алгоритм 3. (deg/> 2Ае% g).

Пусть 2т - К с1е8£ = к<2т+х - 1 и / = 2т+' - к-\.

Разделим полиномы / = /х и ^ = g■xl. Для этого разобьем / следующим образом: / = / -х1 + /, где 5 = ёе§/0-2'"+2-2.

1. Разделим/ на^: / = + г, (Применяем Ал-

горитм 1).

2. Умножим и вычтем:/ = /, - ^ д^-х5 = /0 - (/}-

- п)*1-

3. Если с^/ < 2 с1е§ §і, то разделим / на / = = &і '?2 + ^ (Применяем Алгоритм 1 или 2).

3.1. Остаток от деления/на g: г.

3.2. Частное отделения/на#: д = «зух5 + д2-

4. Если с1е§/ > 2-&е% gі, то идем на начало Алгоритма 3.

Доказательство Алгоритма 3. По построению имеем сіе£ g^ = 2т+1 - 1, йе%/=2"'*1 - 2, следовательно, на шаге 1 применим Алгоритм 1. Так как с^/ < Ащ/,

- 2т+1 - 3, то возможны два случая, соответствующие шагу 3 или шагу 4, и алгоритм завершается в конечное число шагов. По построению на шаге 3 получим /о = (§і Ч\У^ + #1 92 + гх' и/= g■(qx х* + д2) + г.

3. АЛГОРИТМ КОРОТКОГО ДЕЛЕНИЯ

Это алгоритм вычисления целой части от деления/ на g, когда остаток не нужно знать, (с^ / = 2п - 2, ёеБ^ = п- 1).

Разобьем /и #:/ = /, ■х1>"+ /2 и £ = #, ■х^"/1+ g2, где Р є [0; 0,5].

1. Разделим:/ = £, ^ + г] .

2. Умножим и вычтем: /г =/- (/і - Гі) хР" - (§2 9і)Р" ■хр"^.

3. Разделим: (/г)' = (яО'^г + О. ГДе / =Ря-1,</ = = Р п/2 - 1 (При <1 > 0 рекурсивно вызывается Алгоритм короткого деления, при й? = 0 происходит возврат без деления.).

4. Результат - целая часть частного: <7 = д,гхр"/2 + д2.

Оценим сложность этого алгоритма 5£>(и), обозначая 5А/(и) - сложность короткого умножения, Р = 0,5:

Ж(п) = £0(л/ 2) + 25М(я/2).

В частности, для стандартного алгоритма умножения: Ж(и) = 0,5-РМ(п).

4. АЛГОРИТМ ТОЧНОГО ДЕЛЕНИЯ

Если известно, что полином / делится без остатка на полином g, то можно применить специальный алгоритм для точного деления. Для случая с^/= 2п - 2, deg g — п - 1 достаточно дважды обратиться к алгоритму короткого деления.

1. Разобьем/и я:/=/гх'' +/2 и§ =ягхл/2+§2-

2. Разделим: / = с/, + Г|. Алгоритм короткого

деления.

3. Инвертируемых) —> х2"_2Д1/х), §(х) -> х"А §(1/х).

4. Разобьем/и £:/=/3-х" +/4 и # = §3-х"л+ ^4.

5. Разделим: fз = gз дз + гз- Алгоритм короткого деления.

6. Инвертируем: д3(х) х"/2^з(1/х).

7. Результат - частное д = д \ -х"'7 + дъ.

Сложность алгоритма ЕО(п) = 2Ж(л/2).

ЛИТЕРАТУРА

1. Кнут Д.Э. Искусство программирования. Получисленные алгоритмы. М.: Издат. дом «Вильямс», 2001. Т. 2. С. 553.

2. Mulders Т., Storjohann A. On Short Multiplications and Divisions // Applicable Algebra in Engineering, Communication and Computiong. 2000. V. 1.

3. Jebelean T, Dragan M, Tepenue D, Negru V. Parallel algorithms for practical multiprecision arithmetic using the Karatsuba method //

Proceedings of Algoritmy. 2000. P. 1-10.

4. Jebelean T. Practical integer division with Karatsuba complexity // W. Kuechlin, ed. ISSAC’97. ACM Press, 1997. P. 339-341.

БЛАГОДАРНОСТИ: Работа частично финансировалась грантами Министерства образования РФ Е02-2.0-98 и «Научный потенциал» 23-03-24.

АЛГОРИТМЫ УМНОЖЕНИЯ КАРАЦУБЫ И ШТРАССЕНА ДЛЯ РАЗРЕЖЕННЫХ СТРУКТУР

© Г.И. Малашонок, Е.С. Сатина

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Обсуждается применение быстрых алгоритмов умножения к разреженным структурам. Даются оценки для допустимой степени разреженности матриц и полиномов, при которой быстрые алгоритмы умножения имеют преимущество по мультипликативной сложности по сравнению со стандартными алгоритмами. Исследование ведется для алгоритмов Карацубы [1] и Штрассена [2] и предполагается равномерное распределение нулевых элементов.

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

АЛГОРИТМ КАРАЦУБЫ

Пусть R - поле. Рассматривается задача умножения двух полиномов Дх) и g(x) степени п (п = 2n - 1) из кольца Л[х], у которых ненулевые элементы распределены равномерно и их плотность равна а. Применяется рекурсивный алгоритм:

fg = (А + Вх)(С + Dx) =

= АС + (АС + BD - (А - В)(С - D))x + BDx,

где А, В, С, D - многочлены степени 2ЛМ - 1. Чтобы учесть разреженность полиномов, будем полагать, что глубина рекурсии равна к. После чего вычисляется произведение полиномов степени 2'v к - 1 стандартным способом и при этом требуется (2N~ka)2 операций умножения.

Обозначим через ф(а) плотность суммы полиномов, когда а - плотности слагаемых. Для конечного поля, содержащего р элементов, ф(а) = 2а - а2 р/(р - 1), для поля характеристики 0 ф (а) = 2а - а2. Тогда общее число операций умножения в случае поля, содержащего р элементов, составит:

сі

5=0

р-1

2J-

Для поля характеристики 0 достаточно перейти к пределу при р —> о0, и в выражении для ф'(а) исчезнет дробь.

Сравним полученную оценку сложности со сложностью стандартного умножения - (а2л)2 для разной глубины рекурсии (1, 2, ..., 15) и для разной плотности исходных многочленов. Полученные результаты представлены в таблице плотностей (табл. 1). В левом столбце указана глубина рекурсии, в верхней строке -отношение сложности алгоритма Карацубы к сложности стандартного умножения. На пересечении соответствующих столбца и строки - плотность полиномов-сомножителей.

Например, при глубине рекурсии 15 алгоритм Карацубы имеет вдвое меньшую мультипликативную сложность, чем стандартный алгоритм, когда плотности полиномов сомножителей равны 0,1503.

В практических целях можно пользоваться графиком, приведенным на рис. 1. На этом графике изображены линии уровня (1, 1/2, 1/4, 1/8, 1/16) с постоянным отношением сложности алгоритма Карацубы к сложности стандартного алгоритма. По горизонтальной оси откладываются логарифмы степеней полиномов сомножителей N = \0g2n, по вертикальной оси - плотности.

АЛГОРИТМ ШТРАССЕНА

Формула Штрассена [2] для умножения матриц дает алгоритм для вычисления произведения матриц порядка п = 2^, в котором ~ и2 8 операций умножения.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.