КАТЕГОРИИ: Архитектура-(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) = Gt^ - т2)т2) из-за возможности равенства тг = т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). Каждое слагаемое, возникающее в результате раскрытия скобок в по Пример 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) и при § 22. Модулярная арифметика
Дата добавления: 2014-01-11; Просмотров: 570; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |