Реферат: Быстрые вычисления с целыми числами и полиномами

Предварительное заключение, которое можно вывести из предыдущих вычислений, складывается в пользу дихотомического возведения в степень: если n есть степень двойки (гипотеза ad hoc), этот алгоритм ещё выдерживает конкуренцию, даже если эта победа гораздо скромнее в данном контексте (n 2 d 2 /3 против n 2 d 2 /2), чем когда работаем в Z/p Z (2log2 n против n ).

Но мы не учли корректирующие перемножения, которые должны быть выполнены, когда показатель не является степенью двойки. Если n = 2l+1 – 1, нужно добавить к последовательным возведениям в квадрат перемножения всех полученных многочленов. Умножение многочлена степени (2i -1)d на многочлен степени 2i d вносит свой вклад из ((2i – 1)d + 1)( 2i d + 1) умножений, которые, будучи собранными по всем корректирующим вычислениям, дают дополнительную сложность:


= =

=

Теперь можно заключить, что дихотомическое возведение в степень не всегда является лучшим способом для вычисления степени многочлена с помощью перемножений многочленов. Число перемножений базисного кольца, которые необходимы, C sqr (n ), - в действительности заключено между ( ) и т.е. между n 2 d 2 /3 и 2n 2 d 2 /3, тогда как простой алгоритм требует всегда n 2 d 2 /2 перемножений. В частности, если исходный многочлен имеет степень, большую или равную 4, возведение в степень наивным методом требует меньше перемножений в базисном кольце, чем бинарное возведение в степень, когда n имеет форму 2l – 1.

Можно довольно просто доказать, что если n имеет вид 2l +2l 1 + c (выражения, представляющие двоичное разложение n ), то метод вычисления последовательными перемножениями лучше метода, использующего возведение в квадрат (этот последний метод требует корректирующего счёта ценой, по крайней мере, n 2 d 2 /9). Всё это доказывает, что наивный способ является лучшим для этого класса алгоритмов, по крайней мере, в половине случаев.

Действительно, МакКарти [3] доказал, что дихотомический алгоритм возведения в степень оптимален среди алгоритмов, оперирующих повторными умножениями, если действуют с плотными многочленами (антоним к разреженным) по модулю m , или с целыми и при условии оптимизации возведения в квадрат для сокращения его сложности наполовину (в этом случае сложность действительно падает приблизительно до n 2 d 2 /6 + n 2 d 2 /3 = n 2 d 2 /2).

3.3 Небольшие оптимизации для произведений многочленов

В принципе вычисление произведения двух многочленов степеней n и m соответственно требует (n +1)(m +1) элементарных перемножений. Алгоритм оптимизации возведения в квадрат состоит просто в применении формулы квадрата суммы:


что даёт n +1 умножений для первого члена и n (n +1)/2 – для второго, или в целом (n +1)(n +2)/2 умножений, что близко к половине предусмотренных умножений, когда n большое.

Для произведения двух многочленов первой степени P = aX +b иQ =cX + d достаточно легко находим формулы U =ac , W =bd , V = (a + b )(c + d ) и PQ = =UX 2 + (VUW )X +W , в которых появляются только три элементарных умножения, но четыре сложения. Можно рекурсивно применить этот процесс для умножения двух многочленов P и Q степени 2l – 1, представляя их в виде и применяя предыдущие формулы для вычисления PQ в зависимости от A , B , C и D , где каждое произведение AB , CD и (A + B )(C + D ) вычисляется с помощью рекурсивного применения данного метода (это метод Карацубы). Всё это даёт мультипликативную сложность M (2l )и аддитивную сложность A (2l )такие, что:

M (2l ) = 3M (2l – 1 ),…, M (2) = 3M (1),M (1) = 1,

A (2l ) =3A (2l – 1 ) + 3*2l ,…, A (2) = 3A (1) + 6,A (1) = 1.

В этой последней формуле член 3*2l представляет собой число элементарных сложений, необходимых, чтобы сделать два сложения многочленов степени 2l – 1 – 1 (a + b и c + d ) и два вычитания многочленов степени 2l – 1 (UVW ). Суммируя каждое из этих выражений, находим для n , являющегося степенью двойки:

M (n ) = n log3/log2 »n 1,585 иA (2) =7 n log3/log2 – 6n .

К сожалению, этот принцип остаётся теоретическим, и на его основе нужно построить итерационный алгоритм, чтобы получить разумную эффективность (цена управления рекурсией очень велика).

3.4 Вычисление многочленов

Рассмотрим общую задачу вычисления многочлена n -й степени

u (x ) = un xn + un – 1 xn – 1 + ... + u 1 x + u 0 , un ¹ 0, (1)

3.4.1 Схема Горнера

u (x ) = (…(un x + un – 1 )x + …)x + u 0 . (2)

Весь этот процесс требует n умножений и n сложений.

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

вещественное + комплексное требует 1 сложение,

комплексное + комплексное требует 2 сложения,

вещественное * комплексное требует 2 умножения,

комплексное * комплексное требует 4 умножения и 2 сложения

или 3 умножения и 5 сложений.

Следовательно, схема Горнера (2) требует 4n – 2 умножений и 3n – 2 сложений или 3n – 1 умножений и 6n – 5 сложений для вычисления u (z ), когда z комплексное. Вот другая процедура для вычисления u (x + iy ):

a 1 = un , b 1 = un – 1 , r = x + x , s = x 2 + y 2 ; (3)

aj = bj – 1 + raj – 1 , bj = un – j saj –1 , 1 < j £n .

Легко доказать индукцией по n , что u (z ) = zan + bn . Эта схема требует 2n + 2 умножений и 2n + 1 сложений, так что при n ³ 3 она лучше схемы Горнера.

Рассмотрим процесс деления многочлена u (x ) на многочлен x – x0 . В результате такого деления мы получаемu (x ) = (xx 0 )q (x ) + r (x ); здесь deg(r ) < 1, поэтому r (x ) есть постоянная, не зависящая от x и u (x 0 ) = 0*q (x 0 ) + r = r . Анализ этого процесса деления показывает, что вычисления почти те же самые, что в схеме Горнера для определения u (x 0 ). Аналогично, когда мы делим u (z ) на многочлен (zz 0 )(zz 0 ) = z 2 – 2x 0 z + x 0 2 + y 0 2 , то соответствующие вычисления эквивалентны процедуре (3); мы получаем

u (z ) = (zz 0 )(zz 0 )q(z) + an z + bn ;

следовательно,

u (z 0 ) = an z 0 + bn .

Вообще, когда мы делим u (x ) на, f (x ) получая u (x ) = f (x )q (x ) +­ r (x ), то из равенства f (x 0 ) = 0 следует u (x 0 ) = r (x 0 ); это наблюдение ведёт к дальнейшим обобщениям правила Горнера. Мы можем положить, например, f (x ) = x ­2x 0 2 ; это даст нам схему Горнера «второго порядка»

u (x ) = (…(u 2 ë n /2 û x 2 ­­­ + u 2 ë n /2 û – 2 )x 2 + u 0 +

+((….u 2 é n /2 ù - 1 x 2 + u 2 é n /2 ù - 3 )x 2 + … +)x 2 u 1 )x . (4)

3.4.2 Интерполяционная формула Ньютона и табулирование значений многочлена

Рассмотрим специальный случай вычисления многочлена. Интерполяционный многочлен Ньютона степени n , определяемый формулой

u [n ] (x ) = an (x x 0 ) (x x 1 )…(x xn – 1 ) +…+ an (x x 0 ) (x x 1 ) + a1 (x x 0 ) + a0 , (5)

К-во Просмотров: 422
Бесплатно скачать Реферат: Быстрые вычисления с целыми числами и полиномами