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

предполагая, что n 0 содержит (t + 1)двоичных цифр (т. е. что bt ¹ 0 и bt + 1 = 0). В этих условиях вычисляемое выражение может быть записано:


или же .

Если задана последовательность (xi )0 £ i £ t , первый элемент которой есть x 0 и xi для i Î [1,t ] определено соотношением xi = xi 1 2 , то можно записать = P{xi | 0 £i £t , bi ¹ 0}. Чтобы завершить построение алгоритма и иметь возможность получить значение предыдущего произведения, необходимо вычислить биты bi числа n 0 . Для последовательности (ni ) 0 £ i £ t +1 (с начальным элементом n 0 ), определённой соотношением ni = [ni 1 /2] для любого i Î [1, t + 1], бит bi равен нулю, если ni чётно, и равен единице в противном случае. Первое значение индекса i , для которого ni равно нулю, есть t + 1.

Ясно, что число итераций, необходимых для выполнения алгоритма, зависит только от показателя n .

2t £n £ 2t + 1 илиt £ log2 n < t + 1.

Первая часть этого свойства может быть выражена следующим образом: [n /2t + 1 ] = 0 и [n /2t ] ¹ 0, что позволяет точно определить число совершаемых делений n , равное числу итераций алгоритма при заданном значении n . Очевидно, нужно совершить t + 1 итераций, чтобы выполнить алгоритм, т. е. [log2 n ] + 1 итераций. Следовательно, трудоёмкость алгоритма есть O (logn ).

Третий алгоритм – это классический алгоритм Евклида вычисления наибольшего общего делителя целых чисел. Мы предполагаем заданными два натуральных числа a и b и вычисляем их наибольший общий делитель (a ,b ).

2.3 Алгоритм Евклида

1. Вычислим r – остаток от деления числа a на b , a = bq +r , 0 £r < b .

2. Если r = 0, то b есть искомое число.

3. Если r ¹ 0, то заменим пару чисел (a ,b ) парой (b ,r ) и перейдём к шагу1.

Не останавливаясь на объяснении, почему алгоритм действительно находит (a ,b ), докажем некоторую оценку его сложности.

Теорема 1. При вычислении наибольшего общего делителя ( a , b ) с помощью алгоритма Евклида будет выполнено не более 5p операций деления с остатком, где p есть количество цифр в десятичной записи меньшего из чисел a и b .

Доказательство. Положим r 0 = a > b и определим r 1 ,r 2 ,…,rn - последовательность делителей, появляющихся в процессе выполнения шага 1 алгоритма Евклида. Тогда

r1 = b ,…, 0£ ri+1 < ri , i = 0,1,…,n - 1.

Пусть также u 0 = 1,u 1 = 1,uk +1 = uk + uk -1 ,k ³ 1, - последовательность Фибоначчи. Индукцией по i от i = n - 1 до i = 0 легко доказывается неравенство ri +1 ³un - i . А так как un ³ 10( n -1)/5 , то имеем неравенства 10p > b = r 1 ³un ³ 10( n -1)/5 и n < 5p +1.

Немного подправив алгоритм Евклида, можно достаточно быстро решать сравнения ax º 1 (modm ) при условии, что (a ,b ) = 1. Эта задача равносильна поиску целых решений уравнения ax + by = 1.

2.4 Алгоритм решения уравнения ax + by = 1

0. Определим матрицу E =

1. Вычислим r – остаток от деления числа a на b , a = bq + r , 0 £r < b .

2. Если r = 0, то второй столбец матрицы Е даёт вектор (x y ) решений уравнения.

3. Если r ¹ 0, то заменим матрицу Е матрицей

4. Заменим пару чисел (a ,b ) парой (b ,r ) и перейдём к шагу 1.

Если обозначить через Е k матрицу Е , возникающую в процессе работы алгоритма перед шагом 2 после k делений с остатком (шаг 1), то в обозначениях из доказательства теоремы 1 в этот момент выполняется векторное равенство (a ,b )*Ek = (rk -1 ,rk ). Его легко доказать индукцией по k . Поскольку числа a и b взаимно просты, имеем rn = 1, и это доказывает, что алгоритм действительно даёт решение уравнения ax + by = 1. Буквой n мы обозначили количество делений с остатком, которое в точности такое же, как и в алгоритме Евклида.

Полиномиальные алгоритмы в теории чисел – большая редкость. Да и оценки сложности алгоритмов чаще всего опираются на какие-либо не доказанные, но правдоподобные гипотезы, обычно относящиеся к аналитической теории чисел.

Для некоторых задач эффективные алгоритмы вообще не известны. Иногда в таких случаях всё же можно предложить последовательность действий, которая, «если повезёт», быстро приводит к требуемому результату. Существует класс так называемых вероятностных алгоритмов, которые дают правильный результат, но имеют вероятностную оценку времени работы. Обычно работа этих алгоритмов зависит от одного или нескольких параметров. В худшем случае они работают достаточно долго. Но удачный выбор параметра определяет быстрое завершение работы. Такие алгоритмы, если множество «хороших» значений параметров велико, на практике работают достаточно эффективно, хотя и не имеют хороших оценок сложности.

3. Полиномиальная арифметика

Рассмотрим вероятностный алгоритм, позволяющий эффективно находить решения полиномиальных сравнений по простому модулю. Пусть p – простое число, которое предполагается большим, и f (x )ÎZ[x ] – многочлен, степень которого предполагается ограниченной. Задача состоит в отыскании решений сравнения

f (x ) º 0 (mod p ). (1)

Например, речь может идти о решении квадратичных сравнений, если степень многочлена f (x ) равна 2. Другими словами, мы должны отыскать в поле Fp = Z/p Z все элементы, удовлетворяющие уравнению f (x ) = 0.

Согласно малой теореме Ферма, все элементы поля Fp являются однократными корнями многочлена xp - x . Поэтому, вычислив наибольший общий делитель d (x ) = (xp - x , f (x )), мы найдём многочлен d (x ), множество корней которого в поле Fp совпадает с множеством корней многочлена f (x ), причём все эти корни однократны. Если окажется, что многочлен d (x ) имеет нулевую степень, т. е. лежит в поле Fp , это будет означать, что сравнение (1) не имеет решений.

Для вычисления многочлена d (x ) удобно сначала вычислить многочлен c (xxp (mod f (x )), пользуясь алгоритмом, подобным описанному выше алгоритму возведения в степень (напомним, что число p предполагается большим). А затем с помощью аналога алгоритма Евклида вычислить d (x ) = (c (x ) – x , f (x )). Всё это выполняется за полиномиальное количество арифметических операций.

Таким образом, обсуждая далее задачу нахождения решений сравнения (1) мы можем предполагать, что в кольце многочленов Fp [x ] справедливо равенство

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