- •Глава 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
Глава 7. Сводимость
познавания выглядит так: дано х; требуется определить, существует ли у такое, что х вместе с у удовлетворяют фиксированному условию R{x,у). Мы полагаем, что х и у — это коды некоторых математических объектов, т. е. слова в некотором алфавите Л.
Пусть задача распознавания связана указанным образом с задачей построения, пусть R{x, у)еР и полином р таков, что если существует какое-то решение задачи построения, то существует и такое решение у, что |у|^р(|х|). Тогда задача распознавания принадлежит NP в соответствии с определением 30.1, причем в качестве сертификата для х выступает это решение у.
В примерах из § 30 по рассмотренным задачам распознавания легко восстанавливаются соответствующие им задачи построения (построить набор логических значений переменных; построить делитель данного числа; построить клику в графе, имеющую определенное количество вершин, и т.д.). Для доказательства принадлежности классу NP задачи распознавания мы брали в качестве сертификата само решение соответствующей вычислительной задачи.
Такой выбор сертификатов в ряде доказательств, видимо, и служит причиной довольно распространенного представления, что класс Р образуют вычислительные задачи, решаемые за полиномиально ограниченное время, а класс NP—вычислительные задачи, для каждой из которых за полиномиально ограниченное время можно проверить, является ли данное слово у ее решением. На самом деле, конечно, в классы Р и NP входят только задачи распознавания, но упомянутое представление, будучи, строго говоря, неправильным, в известной мере согласуется с реальным положением вещей.
Быстрый алгоритм распознавания наличия какого-то математического объекта, кодируемого словом из Л*, может в некоторых случаях позволить быстро решать и задачу фактического построения этого объекта. Проиллюстрируем это примером.
Пример 32.3. Мы знаем, что задача распознавания простоты натурального числа п принадлежит классу Р, — алгоритм Агравала, Кай-ала и Саксены (пример 22.2) имеет битовую сложность 0{т1г), где т — битовая длина п. Вопрос о существовании полиномиального алгоритма факторизации (разложения на простые множители) остается без ответа до сих пор при том, что алгоритмы факторизации имеют огромную важность, например, для криптографии. Вернемся в связи с этим вопросом к принадлежащей NP задаче, рассмотренной в примере 30.2: для заданных п, k е N+, к < п, выяснить, имеется ли у числа п делитель I такой, что 1 < I s= к. Полиномиальный алгоритм реше-
Задачи
209
ния этой задачи тоже неизвестен, но можно показать, что открытие такого алгоритма—назовем его A — автоматически дало бы полиномиальный алгоритм факторизации (кстати сказать, существование A автоматически следовало бы из равенства Р = NP, если бы оно вдруг было доказано). Для этого можно воспользоваться бинарным поиском.
Пусть уже установлено, что n не имеет делителей, меньших n1, где n1 < n, и пусть n2 таково, что n1 < n2 < n, и мы интересуемся наименьшим принадлежащим отрезку [nг, n2] простым множителем чис-
Гn1+n21
ла n. Тогда, применяя Aкn, n3, где n3 = ——^—£ , мы сузим диапазон поиска примерно вдвое: в зависимости от результата применения A мы перейдем от отрезка [nъ n2] либо к отрезку [nъ n3], либо к отрезку [n3 + 1, n2]. Первоначально же полагаем nг = 2,n2 = n. Применив алгоритм A не более m = [log2(n + 1)1 раз, мы найдем наименьший простой множитель t числа n. Повторяем те же вычисления для
n' = t (32.2)
и т.д. Общее число простых множителей числа n с учетом их кратности ограничено сверху величиной log2 n, и, значит, величиной m. Битовые затраты каждого деления (32.2) не превосходят Cm2, где C — некоторая константа. Если битовая сложность алгоритма A есть O{md), то сложность описанного алгоритма факторизации будет допускать оценку O{md+2), т.е. этот алгоритм будет полиномиальным.
Задачи
145. Задача умножения квадратных булевых матриц линейно сводится к задаче построения транзитивно-рефлексивного замыкания (предполагается, что для сложностей рассматриваемых алгоритмов построения транзитивно-рефлексивного замыкания выполнено T(Зn) = O(T(n))).
Указание. Пусть Mг и M2—две булевы матрицы порядка n. Пусть X — булева матрица порядка Зn:
0 0 M2 . \0 0 0 /
Чему равны X2,X3? Воспользоваться формулой (23.1) для транзитивно-рефлексивного замыкания.
210