ЛЕКЦІЯ 3
Використання модульної арифметики. Обчислення з многочленами. Методи множення. Складність обчислень.
План.
1. Обчислення в кільці лишків. Алгоритм Монтгомері.
2. Обчислення з многочленами.
3. Методи множення.
4. Метод А. Карацуби.
5. Оцінка складності алгоритмів.
Ефективний шлях багатократного приведення за модулем – використання методу Монтгомері, запропонованого у 1985 році. Цей метод є особливо ефективном за апаратної реалізації алгоритмів. Дуже зручно відмовитися від операцій ділення і множення і замінити їх операціями додавання. Метод полягає в наступному. Нехай - непарне число, треба перемножити лишки и . Розглянемо алгоритм:
R = 0;
for i = 0 until i < n do
begin
if ai = 1 then R = R + B;
if R - нечетно then R = R + N;
R = R / 2;
end
if R ³ N then R = R - N.
Сутність даного алгоритму в тому, що за рівності
A =
Множення числа числа В на число А зводиться до обчислення виразу
AB =
Воно виконується за кроків, на кожному з яких виконується додавання да поточного значення значення , з подальшим діленням на 2. завдяки цьому діленню, отримані значення завжди знаходяться у інтервалі . У результаті роботи даного алгоритма отримуємо число . Тепер для отримання числа необхідно ще раз застосувати даний алгоритм до чисел и . Оскільки число обчислюється за допомогою зсувів і віднімань зі складністю двійкових операцій (його можна обчислити зазделегідь і зберігати отримане значення), а алгоритм також виконується за двійкових операцій.
Напиклад:
Нехай А = 1´20 + 0´21 + 1´22 + 0´23 + 1´24 = 1 + 4 + 16 = 21 (10101)
В = 18
N = 41
Зрозуміло, що АВ (mod N) = 21´18 (mod 41) = 9
Обчислимо добуток цих чисел за допомогою вищенаведеного алгоритму.
1. R = 0
a0 = 1
R = R + B = 0 + 18 = 18;
R - четно;
R = R / 2 = 9.
2. a1 = 0;
R - нечетно;
R = R + N = 9 + 41 = 50;
R = R / 2 = 25;
3. a2 = 1
R = R + B = 25 + 18 = 43;
R - нечетно;
R = R + N = 43 + 41 = 84;
R = R / 2 = 42;
4. a3 = 0;
R - нечетно;
R = R + N = 1 + 41 = 42;
R = R / 2 = 21;
5. a4 = 1
R = R + B = 21 + 18 = 39;
R - нечетно;
R = R + N = 39 + 41 = 80;
R = R / 2 = 40.
Это мы получили 2-n AB(mod N)
.Теперь мы должны еще раз воспользоваться этим алгоритмом для вычисления АВ (mod N).
A’ = 22n (mod N) = 22 ´5(mod N) = 1024(mod 41) = 40 = 0´20 + 0´21 + 0´22 + 1´23 + 0´24 + 1´25
B ’= 40;
N = 41.
1. R = 0
a0 = 0
R - парне;
R = R / 2 = 0.
2. a1 = 0;
R - парне;
R = R / 2 = 0;
3. a2 = 0
R - парне;
R = R / 2 = 0;
4. a3 = 1;
R = R + B = 0 + 40 = 40;
R - парне;
R = R / 2 = 20;
5. a4 = 0;
R - парне;
R = R / 2 = 10;
6. a5 = 1;
R = R + B = 10 + 40 = 50;
R = R - N = 50 - 41 = 9.
Обернення.
Для заданого числа , , знаходимо за допомогою розширеного алгоритма Евкліда числа та , що задовільняє рівності . Якщо , то в якості оберненого можна взяти . Таким чином, обернення в кільці лишків можна виконати за бітових операцій.
Ділення.
Так як , то ділення в кільці лишків виконується із складністю .
Обчислення з многочленами. Між обчисленнями над довільним кільцем та у кільці цілих чисел, записаних у якій-небудь системі обчислень багато спільного. Вони виконуються за схожими формулами, а різниця полягає лише в тому, що для чисел необхідно брати до уваги знаки переносу від молодших розрядів до старших, у той час коли у випадку многочленів ніяких переносів при операціях з коефіцієнтами не виникає – і початкові величини і значення лежать у кільці .
Складність операцій з многочленами зазвичай оцінюють кількістю арифметичних операцій кільця , що виконуються над його коефіцієнтами. Якщо відома складність бітової операції у полі, то можна оцінити результуючи бітову складність операцій з многочленами. Щоб відрізняти арифметичну складність від бітової в оцінках ми будемо використовувати символи і .
Обчислення значень многочленів.
Нехай - довільне кільце. Розглянемо добре відомий алгоритм Руфіні – Горнера для обчислення значень многочлена
Над кільцем у точці . Він базується на наступному представленні многочлена
і полягає у послідовному обчисленні значень за формулами
Останнє число і буде шуканим значенням многочлена. Арифметична складність алгоритма, очевидно, становить . Бітову складність у випадку, коли у якості кільця розглядається кільце цілих чисел можна оцінити виразом , де через позначений максимум з двох чисел: числа двійкових знаків у записі найбільшого з коефіцієнтів і числа , а число позначає число двійкових знаків у записі найбільшого з чисел . Таким чином, отримуємо оцінку
Алгоритм Руфіні - Горнера дозволяє отримати не тілько значення . Як показує наступна теорема, величини є коефіцієнтами многочлена, що є залишком від ділення многочлена на .
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.