- •Глава 1
- •§ 1. Затраты алгоритма для данного входа, алгебраическая сложность
- •§ 1. Затраты алгоритма для данного входа
- •§ 1. Затраты алгоритма для данного входа
- •§ 1. Затраты алгоритма для данного входа
- •§ 1. Затраты алгоритма для данного входа
- •§ 2. Асимптотические оценки (формализм)
- •§ 2. Асимптотические оценки (формализм)
- •§ 2. Асимптотические оценки (формализм)
- •§ 3. Асимптотические оценки (два примера) 23
- •§ 3. Асимптотические оценки (два примера)
- •§ 3. Асимптотические оценки (два примера)
- •§ 3. Асимптотические оценки (два примера)
- •§ 3. Асимптотические оценки (два примера)
- •§ 4. Длина числа как возможный размер входа
- •§ 4. Длина числа как возможный размер входа
- •§ 4. Длина числа как возможный размер входа
- •§ 4. Длина числа как возможный размер входа
- •Глава 2
- •§ 5. Понятие сложности в среднем
- •§ 5. Понятие сложности в среднем
- •Глава 2. Сложность в среднем
- •§ 5. Понятие сложности в среднем
- •Глава 2. Сложность в среднем
- •§ 6. Сортировка и конечные вероятностные пространства.
- •§ 6. Сортировка и конечные вероятностные пространства 47
- •Глава 2. Сложность в среднем
- •§ 6. Сортировка и конечные вероятностные пространства 49
- •Глава 2. Сложность в среднем
- •§ 6. Сортировка и конечные вероятностные пространства 51
- •Глава 2. Сложность в среднем
- •§ 7. Пример медленного роста сложности в среднем
- •§ 7. Пример медленного роста сложности в среднем в сравнении со сложностью в худшем случае
- •Глава 2. Сложность в среднем
- •§ 7. Пример медленного роста сложности в среднем 55
- •Глава 2. Сложность в среднем
- •§ 7. Пример медленного роста сложности в среднем
- •Глава 2. Сложность в среднем
- •§ 8. Функция затрат рандомизированного алгоритма
- •§ 8. Функция затрат рандомизированного алгоритма
- •Глава 2. Сложность в среднем
- •§ 8. Функция затрат рандомизированного алгоритма
- •Глава 2. Сложность в среднем
- •§ 8. Функция затрат рандомизированного алгоритма
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 3
- •§ 9. Функции, убывающие по ходу выполнения алгоритма
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 75
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 77
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 79
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 81
- •§ 10. Качество оценок
- •§ 10. Качество оценок
- •§ 10. Качество оценок
- •§ 10. Качество оценок
- •§ 11. Завершимостъ работы алгоритма
- •§ 11. Завершимость работы алгоритма
- •§ 11. Завершимостъ работы алгоритма
- •§ 11. Завершимостъ работы алгоритма
- •§ 12. Вложенные циклы (дополнительные примеры)
- •§ 12. Вложенные циклы (дополнительные примеры)
- •§ 13. Нецелые размеры входа и непрерывные оценочные функции 97
- •§ 13. Нецелые размеры входа и непрерывные оценочные функции
- •§ 13. Нецелые размеры входа и непрерывные оценочные функции 99
- •Глава 4
- •§ 14. Понятие нижней границы сложности
- •§ 14. Понятие нижней границы сложности
- •§ 15. Оптимальные алгоритмы
- •§ 15. Оптимальные алгоритмы
- •§ 15. Оптимальные алгоритмы
- •§ 15. Оптимальные алгоритмы
- •§ 16. Асимптотические нижние границы. Алгоритм, оптимальный по порядку сложности
- •§ 16. Асимптотические нижние границы
- •§ 16. Асимптотические нижние границы
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем 125
- •§ 18. Нижние границы сложности рандомизированных алгоритмов. Принцип Яо
- •§18. Нижние границы сложности рандомизированных алгоритмов 127
- •Глава 5
- •§ 19. Битовые операции
- •Глава 5. Битовая сложность
- •§ 19. Битовые операции
- •Глава 5. Битовая сложность
- •§ 20. Наивная арифметика: умножение
- •§ 20. Наивная арифметика: умножение
- •Глава 5. Битовая сложность
- •§ 20. Наивная арифметика: умножение
- •Глава 5. Битовая сложность
- •§ 21. Наивная арифметика: деление с остатком
- •§ 21. Наивная арифметика: деление с остатком
- •Глава 5. Битовая сложность
- •§ 21. Наивная арифметика: деление с остатком
- •Глава 5. Битовая сложность
- •§ 22. Модулярная арифметика
- •§ 22. Модулярная арифметика
- •Глава 5. Битовая сложность
- •§ 22. Модулярная арифметика
- •Глава 5. Битовая сложность
- •§ 22. Модулярная арифметика
- •Глава 5. Битовая сложность
- •§ 23. Булева арифметика
- •§ 23. Булева арифметика
- •Глава 5. Битовая сложность
- •§ 23. Булева арифметика
- •Глава 5. Битовая сложность
- •Глава 5. Битовая сложность
- •Глава 6
- •§ 24. Простейшие рекуррентные уравнения
- •§ 24. Простейшие рекуррентные уравнения
- •§ 24. Простейшие рекуррентные уравнения
- •§ 25. Об одном классе нелинейных рекуррентных соотношений 163
- •§ 25. Об одном классе нелинейных рекуррентных соотношений
- •§ 25. Об одном классе нелинейных рекуррентных соотношений 165
- •§ 25. Об одном классе нелинейных рекуррентных соотношений 167
- •§26. Асимптотические оценки решений рекуррентных неравенств 169
- •§ 26. Асимптотические оценки решений рекуррентных неравенств
- •§ 26. Асимптотические оценки решений рекуррентных неравенств 171
- •§ 27. Добавление нулей
- •§ 27. Добавление нулей 173
- •§ 27. Добавление нулей 175
- •§ 27. Добавление нулей
- •§ 27. Добавление нулей 179
- •Глава 7 Сводимость
- •§ 28. Линейная сводимость
- •Глава 7. Сводимость
- •§ 28. Линейная сводимость
- •Глава 7. Сводимость
- •§ 28. Линейная сводимость
- •Глава 7. Сводимость
- •§ 29. Линейная сводимость и нижние границы сложности
- •§ 29. Линейная сводимость и нижние границы сложности 191
- •Глава 7. Сводимость
- •§ 29. Линейная сводимость и нижние границы сложности 193
- •Глава 7. Сводимость
- •§ 30. Классы PиNp
- •§ 30. Классы р и np
- •Глава 7. Сводимость
- •§ 30. Классы PuNp
- •Глава 7. Сводимость
- •§ 30. Классы PuNp
- •Глава 7. Сводимость
- •§ 31. Существование задач распознавания, не принадлежащих р 201
- •§ 31. Существование задач распознавания, не принадлежащих р. Связь моделей мт и рам
- •Глава 7. Сводимость
- •§ 31. Существование задач распознавания, не принадлежащих р 203
- •Глава 7. Сводимость
- •§ 32. Полиномиальная сводимость. Np-полные задачи
- •§ 32. Полиномиальная сводимость. Np-полные задачи
- •Глава 7. Сводимость
- •Глава 7. Сводимость
- •Глава 7. Сводимость
- •Глава 7. Сводимость
- •Глава 1. Сложности алгоритмов как функции числовых аргументов. Сложность в худшем случае
- •119002, Москва, Большой Власьевский пер., 11. Тел. (499) 241-74-83
§ 21. Наивная арифметика: деление с остатком
Обратимся к наивному делению с остатком. Здесь мы считаем, что m = mг^ m2.
Предложение 21.1. Пусть T*D(m) — сложность по числу битовых операций наивного деления при использовании m в качестве размера входа. Пусть T*^(mъ m2)— сложность по числу битовых операций этого же алгоритма при использовании mъ m2 в качестве двух параметров размера входа. Тогда
T*D(m) = Q(m2), T^*(m1,m2) = e((m1-m2 + l)m2). (21.1)
Доказательство. Наивное деление a на b сводится к ряду вычитаний числа b, и в каждом вычитании битовая длина уменьшаемого либо равна, либо на единицу превосходит m2. Битовые затраты на каждое такое вычитание не могут превзойти, как мы знаем, c{m2 + 1). Количество всех таких вычитаний не превосходит mг-m2 + 1, откуда T^* {mъm2) = O{{mг - m2 + 1)(m2 + 1)) и, после
§ 21. Наивная арифметика: деление с остатком
141
упрощения, Т^(т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 = 2Lm/2J, то битовые затра- ты на наивное деление будут не меньше чем (т-у+1](тМ+1], и, как следствие, 7^D(m) = Г2(т2). Получаем 7^D(m) = 6(т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).
Каждое слагаемое, возникающее в результате раскрытия скобок в по следнем выражении, есть O(logalogb) при а, Ь—><*>, а^Ъ. Отсюда следует первая часть утверждения. Вторая часть следует из того, что log2 a log2 Ъ s= log2 а при а ^ Ъ. □
Пример 21.1. Пусть пик — положительные целые числа, к ^ 2, заданные в двоичной системе счисления. Покажем, что при избрании п в качестве размера входа п, к (равно как и при избрании п, к в качестве двух параметров размера этого входа) битовая сложность обычного алгоритма построения fc-ичной записи числа п с помощью наивных делений с остатком допускает оценку О (log2 п).
В самом деле, при построении fc-ичной записи п шаг за шагом рас-сматриваются числа q0,<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 п), поэтому оценка для
142