Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Наивная арифметика: деление с остатком

Обратимся к наивному делению с остатком. Здесь мы считаем, что m = mг^ m2.

Предложение 21.1. Пусть T*D(m) — сложность по числу битовых операций наивного деления при использовании m в качестве разме­ра входа. Пусть T*^(mъ m2)— сложность по числу битовых операций этого же алгоритма при использовании mъ m2 в качестве двух пара­метров размера входа. Тогда

T*D(m) = Q(m2), T ^*(m 1, m 2) = e((m 1- m 2 + l) m 2). (21.1)

Доказательство. Наивное деление a на b сводится к ряду вы­читаний числа b, и в каждом вычитании битовая длина уменьша­емого либо равна, либо на единицу превосходит m2. Битовые затра­ты на каждое такое вычитание не могут превзойти, как мы зна­ем, c{m2 + 1). Количество всех таких вычитаний не превосходит mг-m2 + 1, откуда T ^* {mъm2) = O{{mг - m2 + 1)(m 2 + 1)) и, после


§ 21. Наивная арифметика: деление с остатком



упрощения, Т^(т1г т2) = 0{{тг2 + 1)т2) (см. задачу 101). С дру­гой стороны, если, например, а = 2™1 - 1, Ъ = 2'"2-1, то число вы­читаний равно тг2 + 1, и, как следствие, битовые затраты на наивное деление будут не меньше, чем г - т2 + 1)т2. Поэтому Т**0(.тъ т2) = GCCni! - т2 + 1)т2).

Оценка T*D (т) = 0{т2) следует теперь из неравенства т2гт2 ^
^{тг2 + 1)т2. Если взять а = 2т-1, b = 2L m/ 2J, то битовые затра-
ты на наивное деление будут не меньше чем (т-у+1](тМ+1],
и, как следствие, 7^D(m) = Г2(т2). Получаем 7^D(m) = 6(т2). П

Мы не пишем Т*£(тъ т2) = Gt^ - т22) из-за возможности ра­венства тг = т2 (из которого не следует, что а = Ъ). Эта возможность указывает и на то, что неверно соотношение T^l{m1,m2) = Q{m1m2).

Предложение 21.2. При использовании самих положительных це­лых а,Ъ, а^Ъ>1, в качестве параметров размера входа, сложность наивного деления а на Ъ допускает оценку О (log a log Ь). При исполь­зовании а в качестве размера входа имеем оценку О (log2 а).

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

c ((Uog2 а] + 1) - (Llog2 Ъ\ + 1) + 1) (Llog2 Ъ\ + 1)

(с — положительная константа), которое не превосходит в свою оче­редь

c (log2 а - log2 Ъ + 2)(log2 Ъ + 1).

Каждое слагаемое, возникающее в результате раскрытия скобок в по­
следнем выражении, есть O (log a log b) при а, Ь—><*>, а^Ъ. Отсюда
следует первая часть утверждения. Вторая часть следует из того, что
log2 a log2 Ъ s= log2 а при а ^ Ъ.

Пример 21.1. Пусть пик — положительные целые числа, к ^ 2, заданные в двоичной системе счисления. Покажем, что при избра­нии п в качестве размера входа п, к (равно как и при избрании п, к в качестве двух параметров размера этого входа) битовая сложность обычного алгоритма построения fc-ичной записи числа п с помощью наивных делений с остатком допускает оценку О (log2 п).

В самом деле, при построении fc-ичной записи п шаг за шагом рас-сматриваются числа q 0,<li,..., qt, t= |_logfc n\ + 1, где q0 = n,qt= ---, i = 1, 2,..., t. Очевидно, что qt s= n, в силу чего общие затраты всех ша­гов для данных пик допускают оценку О (log п log к logfc п). Очевидно, log к logfc п = log п (например, log2 к logfc п = log2 п), поэтому оценка для



Глава 5. Битовая сложность


затрат переписывается в виде О (log2 п); при указанных выше размерах входа эта оценка является и оценкой сложности.

Вновь вернемся к обозначению т для битовой длины максималь­ного из двух данных целых положительных чисел, и пусть т рас­сматривается как размер входа а, Ъ алгоритмов умножения и деления с остатком. Для сложностей наивного умножения и деления мы по­лучили оценки 6(т2), следствием которых являются нижние оценки Г2(т2). Вместе с этим, для умножения и деления известны алгорит­мы, сложности которых при т —> ∞ растут существенно медленнее, чем т2: первый алгоритм такого рода для умножения был предложен в 1962 г. А. А. Карацубой (верхняя оценка 0(m lo&3)), наилучшую из известных к настоящему времени верхнюю асимптотическую оценку битовой сложности О (т log т log log m) имеет алгоритм А.Шенхаге и Ф. Штрассена. Существуют алгоритмы деления, сложность которых допускает такие же оценки (см. задачу 152 к главе 7). Алгоритм Кара-цубы будет рассмотрен нами в § 27, алгоритм Шенхаге—Штрассена в этом курсе подробно не рассматривается; несколько слов о нем бу­дет сказано в конце § 27.

Пример 21.2. Исследуем битовую сложность алгоритма Евклида. В качестве размера входа можно рассмотреть большее число а0, но ни в коем случае не аг: если фиксировано аъ то, неограниченно уве­личивая а0, мы будем неограниченно увеличивать битовые затраты, связанные с первым делением с остатком (а0 на аг). Поэтому при вы­боре аг в качестве размера входа битовая сложность этого алгоритма тождественно равна бесконечности — здесь битовая сложность суще­ственно отличается от алгебраической (т. е. в данном случае от слож­ности по числу делений). Можно считать а0 размером входа, а можно рассмотреть два параметра а0г размера входа. Если т0г — бито­вые длины данных чисел а0, аъ то в качестве размера входа мож­но рассмотреть т = max{ m 0, тг} = т0 или же два параметра входа т0г. В настоящем примере мы будем использовать т.

Прежде всего покажем, что для алгоритма Евклида

a;-i = q; a; + ai +1, i = l,2,..., n, an +1 = 0,

выполняется

a0^ q1q2...qn. (21.2)

В самом деле,

a0>q1a1, a1>q2a2,..., an-2 > qn-ian-i> an-i = 4nan>

и получаем a0 ^ q1q2...qnan, откуда следует (21.2).


§ 21. Наивная арифметика: деление с остатком



Для построения ai+1 делением ai _х на ai с остатком требуется не более c (Llog2 qi\ + l)(Llog2 ai\ + 2) битовых операций, где c —положи­тельная константа. Это дает общую оценку сверху

^CLlog2 qi J +l)(Llog2 ai J +2),

c

i =1

при этом возможно, что некоторые из qi равны единице. Написанная сумма не превосходит

c (Llog2 aг] + 2) ^ (Uog2 qi} + 1).

i=l

При a1>1 выполнено |_log2 aг] + 2 sj 3 log2 aг и, как следствие, c (Llog2 aг\ + 1) j^(Uog2 qi\ + 2) s= 3 c (log2 a l) fn + J] log2 qi =

i=l i=l

= 3 c (log2 a i)(n + log2(q i q 2... qn)) < 3 c (log2 a i)(n + log2 a 0). Как мы знаем, n ^ 2 log2 a x + 1; при a x > 1, очевидно, можем на­писать n ^31og2 a 1. Это дает нам оценку сверху

3c(log2a1)(3log2a1+log2a0)

для числа битовых операций при aг > 1. Учитывая, что a0^aъ мы получаем отсюда следующее.

Количество битовых операций, затрачиваемых при применении алгоритма Евклида к a0, aь допускает оценку

O (log a 0log a i) (21.3)

и оценки O (log2 a 0), O{m2), m = A(a 0).

Приведенные оценки получены в предположении, что для построе­ния остатков используется наивное деление, имеющее квадратичную сложность. Может ли быть так, что привлечение имеющего меньшую битовую сложность алгоритма деления с остатком приведет к суще­ственно меньшим битовым затратам алгоритма Евклида? Ответ отри­цательный: нетрудно, например, показать, что если a0 берется в ка­честве размера входа, то для битовой сложности алгоритма Евклида выполняется оценка n(log2 a 0).

В самом деле, в примере 10.1 было показано, что для каждо­го a0 можно подобрать меньшее его aг такое, что для числа делений с остатком выполняется неравенство (10.10). Если обозначить это чис­ло делений через n, то будем иметь n = n(log a 0), при этом

A(a 0),A(a 1),...,A(an)



Глава 5. Битовая сложность


является невозрастающей конечной последовательностью натураль­ных чисел, и в силу предложения 9.1 никакое значение не встречается в ней более двух раз. Так как деление с остатком ai _ г на ai требует не менее А(ai) битовых операций, то общее число битовых опера­ций не может быть меньше, чем 1+ 1+ 2 + 2 +...+ k + k = k (. k + 1) при k= [ n ^\ и n = n(log a 0). Следовательно, общее число битовых

операций есть ft(log2 a 0).

Вместе с ранее установленной оценкой O (log2 a 0) это дает оценку в (log2 a 0). Теорема 4.2 из § 4 приводит нас к оценке в(m 2) для бито­вой сложности алгоритма Евклида при избрании битовой длины m числа a0 в качестве размера входа. Итак:

Если алгоритм Евклида основывается на некотором алгоритме де­ления с остатком, битовые затраты которого применительно к де­лимому v и делителю w допускают верхнюю оценку O (log v log w), то при рассмотрении большего входного числа a0 в качестве разме­ра входа битовая сложность алгоритма Евклида допускает оценку 6(log2 a 0). При рассмотрении m = А(a 0) в качестве размера входа име­ем оценку в(m 2).

Оказывается, что полученные оценки сохраняют силу и при рас­смотрении расширенного алгоритма Евклида (пример 9.1)—обсто­ятельство, имеющее большое значение для модулярной арифметики (§ 22).

Предложение 21.3. Пусть расширенный алгоритм Евклида осно­вывается на некоторых алгоритмах деления с остатком и умноже­ния, битовые затраты каждого из которых применительно к целым v иw допускают верхнюю оценку O (log v log w). Тогда, при рассмот­рении большего входного числа a0 в качестве размера входа, бито­вая сложность расширенного алгоритма Евклида допускает оценку e(log2 a 0), а при рассмотрении битовой длины m большего числа a0 в качестве размера входа —оценку в(m 2).

Доказательство. Исходя из вычислительных формул (9.8) и при­
нимая во внимание (9.12), (9.13), мы заключаем, что битовые за­
траты, дополнительные к затратам собственно алгоритма Евкли­
да («нерасширенного») на вычисление sn, tn, допускают оценку
O (log a 0log a i)—это обосновывается так же, как оценка (21.3). По­
этому сложность добавочной части расширенного алгоритма Евкли­
да допускает оценку O (log2 a 0) и, в силу теоремы 4.2, оценку O{m2).
Остается заметить, что, например, в(m 2) + O{m2) = в(m 2).


§ 22. Модулярная арифметика



<== предыдущая лекция | следующая лекция ==>
Наивная арифметика: умножение | Модулярная арифметика
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 570; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.