Практическое занятие №2 (ТСО).
Цель занятия :Ознакомиться с простейшими арифметическими алгоритмами и методами оценки их сложности.
Для удобства мы будем полагать, что мы оперируем с целыми числами, выраженными в двоичной системе счисления. У нас есть два - разрядных числа и , то можно записать
где - ² наиболее значимая половина ² числа , а - ² наименее значимая половина ²; подобным же образом , .
Например: Представим в подобной форме число .
Теперь мы имеем .
Эта формула сводит задачу умножения разрядных чисел к трем операциям умножения разрядных чисел: . Плюс некоторые прстые операции сдвига и сложения. Эту формулу можно использовать для умножения с двойной точностью, когда результат нужно получить с четверной точностью.При помощи этой формулы можно определить некоторый рекурсивный процесс для умножения, значительно более быстрый, чем уже знакомый нам метод, когда - велико и имеющий время выполднения порядка .
Если - время, необходимое для выполнения умножения - разрядных чисел, то мы имеем
для некоторой константы , поскольку в правой части соотношения требуется выполнить только три операции умножения плюс некоторые операции сложения и сдвига. Из последнего соотношения по индукции вытекает, что
,
если выбрать - достаточно большим, с тем , чтобы это неравенство выполнялось при , получим
То есть время, затрачиваемое на умножение, можно сократить с величины порядка до величины порядка , и, конечно, при большом
этот алгоритм гораздо быстрее.
Похожий, но более сложный метод выполнения умножения с временем порядка
был впервые предложен А. Карацубой.
Время выполнения можно сократить еще больше, если заметить, что только что расмотренный метод является частным случаем (при ) более общего метода, который дает
для любого фиксированного . Этот более общий метод можно получить следующим образом. Разобьем
и
на частей:
где каждое и каждое являются разрядными числами. Рассмотрим многочлены
,
и положим
.
Так как и , то мы имеем , и поэтому, если знать коэффициенты , можно легко вычислить . Задача состоит в том, чтобы найти хороший способ вычисления коэффициентов , выполняя лишь операций умножения - разрядных чисел плюс некоторые дополнительные операции, для которых время выполнения пропорционально .
Этого можно достичь вычисляя
.
Коэффициенты всякого многочлена степени можно записать в виде линейной комбинации значений этого многочлена в различных точках. Время, необходимое для взятия такой комбинации, самое большее пропорционально .В действительности произведения являются, сторого говоря, не произведениями - разрядных чисел, а произведениями чисел, разряд которых не превышает , где - фиксированная величина, зависящая от . Легко составить программу умножения для - разрядных чисел, которая требует выполнения лишь операций, так как при фиксированном два произведения - разрядных чисел на - разрядные можно получить за операций.Можно показать, что для этого метода .
Теорема.
Для любого существует такая постоянная и такой алгоритм умножения, что число элементарных операций , которые необходимо выполнить, чтобы умножить два -разрядных числа, удовлетворяет оценке .
Эта теорема еще не самый лучший результат. Для практических целей большой недостаток, что метод резко усложняется при т.е. . Эта теорема неудовлетворительна и с теоретической точки зрения, так как в ней не в полной мере используется лежащий в ее основе метод многочленов.
Прежде чем рассмотреть алгоритм Тоома-Кука, разберем один пример. На этом примере нельзя увидеть эффективность метода, поскольку мы имеем дело с небольшими числами. Но можно увидеть некоторые полезные упрощения, которые применимы в общем случае.
Пример.
Предположим, нам нужно умножить на . В двоичной системе счисления на . Пусть . Многочлены , .
Отсюда находим :
(4.1)
Теперь, используя пять последних величин, найдем пять коэффициентов многочлена .
Для нахождения коэффициентов многочлена
при заданных значениях можно воспользоваться одним интересным небольшим алгоритмом. Сначала запишем
, где
и где неизвестны, равно как и . Теперь
, и по индукции находим, что для всех
Обозначая левую часть выражения через мы видим, что
и .
Таким образом, коэффициенты можно вычислить с помощью очень простого метода, который можно продемонстрировать для многочлена , определенного соотношениями (4.1):
Крайняя колонка состоит из заданных значений ;чтобы получить -ю колонку, нужно вычислить разности между соседними величинами предыдущей колонки и разделить их на . Коеффициенты располагаются в колонках сверху; так, , поэтому мы имеем
В общем виде можно записать
эта формула показывает, каким образом из коэфициентов можно получить коэффициенты :
Последовательно получаются коэффициенты многочленов и т.д.
Согласно последней таблице мы имеем
Итак, ответом к нашей исходнй задаче будет где получается в результате действий сложения и сдвига. Кроме того, если коэффициенты многочлена - неотрицательны, то таковыми будут и числа , а тогда все промежуточные результаты, получаемые в процессе проведения вычисления, являются неотрицательными.
На этой идее основан алгоритм Тоома-Кука. Этот алгоритм позволяет существенно улучшить оценку сложности.
Теорема.
Существует константа , такая, что время выполнения алгоритма С меньше циклов.
Задание. Найти методом Карацубы произведение двух чисел и , где - номер по журналу. Оценить сложность вычислений.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.