- •Глава 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
Глава 5. Битовая сложность
то по малой теореме Ферма из этого можно заключить, что n не является простым. Если фиксировано число a такое, что 1 < a < n, то использование бинарного алгоритма возведения в степень с заменой результата каждого из умножений остатком от деления на n позволяет вычислить an и проверить выполнение сравнения (22.2), затратив O(log3n), или, что то же самое, O(mъ) битовых операций, где m = A(n). Однако это не позволяет утверждать, что мы можем на основе этого распознавать простоту n за O{m?) битовых операций, так как существует бесконечно много составных n таких, что
(22.2) выполняется для любых a, взаимно простых с n. Это так на зываемые числа Кармайкла (наименьшее из которых равно 561 = = 3-11 • 17).
Напомним, что алгоритм со сложностью O{md), где m — размер входа, d е N, называют алгоритмом с полиномиально ограниченной сложностью или полиномиальным. В задаче распознавания простоты числа за размер входа берется количество m двоичных цифр числа n или же log2 n. После долгих поисков, в которых принимали участие разные исследователи, алгоритм с полиномиально ограниченной битовой сложностью был в 2002 г. предложен тремя индийскими математиками— М. Агравалом, H. Кайалом и H. Саксеной1. Этот алгоритм получил в литературе название AKS по первым буквам фамилий авторов. Мы обсудим лишь главную идею алгоритма AKS, основанием которого служит следующее необходимое и достаточное условие простоты числа n.
Предложение 22.2. Пусть a е Z, neN взаимно просты, тогда n является простым, если и только если выполнено полиномиальное сравнение
(x - a)n = xn - a (mod n), (22.3)
которое надо понимать так, что числовые коэффициенты при одинаковых степенях x в полиномах, расположенных в левой и правой частях, сравнимы по модулю n.
Доказательство. Пусть n —простое. Если n = 2, то выполнение
(22.3) проверяется непосредственно, и остается рассмотреть случай нечетного n. Коэффициенты при xk в левой и правой частях для
случая 1 < k < n равны соответственно и 0. При этом
(k) делится на n, так как n простое (см. задачу 107). Коэффициенты при xn в обеих частях (22.3) равны 1, свободные члены соответственСм. [42].
§ 22. Модулярная арифметика
149
но равны (-а)" и -а. В силу нечетности п достаточно показать, что ап = а (mod п), а это сравнение выполняется в силу малой теоремы Ферма. Мы доказали, что если п — простое, то выполнено (22.3).
Пусть теперь п — составное. Пусть, далее, простое q и ZeN+ таковы, что ql | п и при этом неверно, что ql+1 | п. Имеем
ГпЛ (n-q + l)(n-q + 2)...n
q q!
Так как q | п, то произведение (п - q + 1)(п - q + 2)... (п - 1) не делится на q; при этом один из входящих в п множителей, равных q, сократится со знаменателем. Поэтому ( п ] не делится на ql. Помимо этого,
g
ql взаимно просто с а"-ч, так как а и q взаимно просты. Поэтому коэффициент при х" в левой части (22.3), равный (-l)n-qan-q(n), не
q
делится на ql, следовательно, не делится наи поэтому не сравним с 0 по модулю п. Мы доказали, что если п — составное, то сравне ние (22.3) не имеет места. □
Из предложения 22.2 следует, что для проверки простоты числа п можно взять любое а, взаимно простое с п (подходит, например, 1), и проверить (22.3). Но прямая такая проверка потребует П(п) = П(2т) битовых операций, так как раскрытие скобок в левой части (22.3) дает п + 1 слагаемое. Алгоритм AKS предписывает проверку (22.3) по двум модулям
{х-а)п=хп-а (mod хг - 1, п), (22.4)
г > 0. Сравнение (22.4) понимается в том смысле, что все коэффициенты остатка от деления полинома (х - а)" - хп + а на хг - 1 (они будут целыми числами) делятся на п. Вычисление остатков от деления (х - а)" и х" на хг - 1 производится с помощью бинарного алгоритма возведения в степень, результат каждого умножения сразу же заменяется остатком от деления на хг - 1. Но если взять произвольное г g N+, то может оказаться, что (22.4) выполняется и при некоторых составных п. Число г должно подбираться специальным образом, и авторы показывают, что подходящее для целей алгоритма г всегда существует и может быть выбрано без существенных затрат так, что г = 0{тъ); после выбора г сравнение (22.4) надо проверить для «небольшого» числа «легко определяемых» а — количество этих а есть 0{-^гт). Итоговая сложность алгоритма допускает оценку 0{т1г). Заметим попутно, что в литературе по теории сложности часто используются оценки вида 0{f{m)) (О называется «О мягкое»),
150