Для определенности будем считать, что делимое и делитель записаны в позиционной системе счисления по основанию . При этом длины чисел и равны, соответственно, и .
Задача нахождения частного сводится к определению приближенного значения дроби с точностью ½, с последующим его округлением до ближайшего целого, и, возможно его уточнением. Уточнение частного требуется, если округление приближенного значения дроби происходит не в ту сторону. Пусть — полученное частное. Тогда , и, значит, искомое частное отличается от полученного, не более чем на 1. Для уточнения частного вычислим остаток и, если , то частное надо уменьшить на 1. Если , то частное надо увеличить на 1.
Приближенное значение дроби с точностью до ½ можно получить как произведение на приближенное значение дроби с точностью . Последний факт следует из неравенства . В свою очередь, приближенное значение дроби можно получить, решая уравнение методом Ньютона (методом касательных).
Пусть — некоторое начальное приближение к дроби . О методах выбора поговорим ниже. Допустим, на -ой итерации построено приближение . Уравнение касательной в точке к функции имеет вид . Точка пересечения касательной с осью абсцисс равна . Взяв эту точку в качестве следующего приближения , повторим процесс. И так до тех пор, пока не будет достигнута требуемая точность приближения.
Обозначим через погрешность приближенного решения , т.е. . При имеем , или .
Из полученной рекуррентной формулы выводим или . Из равенства вытекает, что величина стремится к нулю с ростом k только тогда, когда .
Укажем способ выбора , при котором выполняется неравенство . Положим равным , где — ближайшее целое, не превосходящее дроби . Трудоемкость вычисления значащих разрядов имеет порядок . Далее, . Подставим вместо выражение , где , получим . Поскольку в модуле стоит разность одинаковых по знаку чисел, то не превосходит наибольшего из них. Так как и , то .
Оценим число итераций метода Ньютона, необходимое для достижения требуемой точности. Из равенства и неравенства выводим соотношение . Из неравенства и находим , или . Таким образом, число итераций методом Ньютона не больше .
Полученная оценка числа итераций метода Ньютона справедлива, если на каждой итерации выполняется неравенство .
Выполнение этих неравенств гарантировано при точном вычислении по формуле . Однако, точное вычисление по этой формуле приводит к быстрому росту числа знаков после запятой. Чтобы избежать роста числа знаков после запятой предлагается округлить , но так чтобы неравенство сохранилось.
Для определенности, пусть . В силу выпуклости функции величина всегда находится левее , т.е. . Действительно, . Таким образом, если округлить величину в сторону увеличения с точностью до , то неравенство сохранится. Обозначим через τ ошибку округления . Тогда . Поскольку под модулем стоит разность одинаковых по знаку чисел, то . Отсюда, учитывая неравенства τ< и выводим .
Оценим трудоемкость k-ой итерации метода Ньютона (k ≥ 1). Из сказанного ранее следует, что xk-1 можно округлить в сторону возрастания с точностью до. Таким образом, число знаков после запятой xk-1 больше 2k-1+n. Из неравенств и b≥pn-1делаем вывод, что первые n-1 разрядов после запятой равны нулю. То есть, число xk-1 представляется в виде , где zk-1 — целое число по длине не больше 2k-1+1.
Пусть трудоемкость умножения целых чисел длины s и l равна Tу(s + l). Тогда трудоемкость вычисления xk по формуле (2-bхk-1)хk-1 = (2, с последующим округлением в разрядах по порядку определяется величиной О(Tу(2k+n)). Общая трудоемкость метода Ньютона не превосходит по порядку О.
Приведем оценку трудоемкости операции деления методом Ньютона в предположении, что умножение проводится с использованием быстрого преобразования Фурье. В этом случае Tу(l) = О(l∙logl) и вычисление xk лучше вести по формуле . При этом, образы , вычисляются сразу. Потом над ними проводятся соответствующие операции умножения, вычитания, и только после этого восстанавливается результат. Поскольку , то длина произведения не превосходит 2k-1+1+n. Таким образом, трудоемкость k-ой итерации деления по порядку не превосходит О, а, значит, трудоемкость всего метода ограничена сверху величиной О O(m log m log (m-n)).
Тем самым доказана
Теорема. Трудоемкость деления чисел с остатком ограничена сверху величиной O(m log m log (m-n)).
Если числа а и b заведомо делятся друг на друга, то можно воспользоваться версией метода Ньютона в р-адической арифметике. В дальнейшем будем считать р простым числом. Если b делится на pk, то его последние k разрядов равны 0. Поскольку а делится на b, то а делится на pk. Отбрасывая последние k нулевых разрядов чисел а и b, приходим к задаче деления, где b не делится на р. Так как р — простое число и b0≠0, то наибольший общий делитель b0 и р равен 1. Расширенным алгоритмом Евклида найдем числа u и v, что ub0+рv = 1. Положим х0 = u. Далее проводим итерации метода Ньютона, вычисляя хk по формуле хk = (2-хk-1b)хk-1. Поскольку р — основание системы счисления, то, по сути, мы проводим операции над младшими 2k разрядами, отбрасывая старшие. Обозначим через ηk величину 1-bхk. Индукцией по k покажем сравнение ηk ≡ 0 . При k = 0 имеем: η0 = 1-bх0 ≡ 1- b0u ≡ 0(mod р). Пусть ηk-1≡0. Тогда, ηk=1-bхk≡1-b(2-хk-1b)хk-1≡
≡(1-bхk-1)2 ≡.
Единственным решением сравнения а ≡ bх(mod рm-n) является частное а/b. Поэтому, не более чем через log2(m-n)+1 итерацию метода, частное будет найдено. Трудоемкость метода Ньютона в этом случае не превосходит O(). Если для умножения используется быстрое преобразование Фурье, то Ту(l) = O(l logl). Трудоемкость метода в этом случае оценивается величиной O(. Как видим, за счет более экономной схемы умножения, трудоемкость деления чисел нацело, по порядку, имеет ту же трудоемкость, что и умножение.
Тем самым доказана
Теорема. Трудоемкость деления чисел без остатка ограничена сверху величиной .
•В лекции подробно разобраны быстрые алгоритмы деления.
•Приведены оценки трудоемкости.
Контрольные вопросы и упражнения:
•Возможность распараллеливания алгоритма деления.
•Как изменится алгоритм деления чисел без остатка, если основание системы счисления будет составное.
•Насколько принципиальный характер носит отличие верхних оценок трудоемкости алгоритмов деления с остатком и без остатка.
•Составить алгоритм деления целых чисел без остатка при основании равном 10.
•Составить алгоритм деления целых чисел без остатка при основании равном 2k.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.