- •Глава 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
§ 30. Классы PuNp
197
ния выполняются на базе конечного множества операций с тем или иным числом операндов, преобразующих буквы алфавита Л в буквы алфавита Л; исследуется сложность по числу этих операций — подобие битовой сложности. Требуется также учет числа присваиваний в ходе выполнения алгоритма.
Таким образом, содержательная задача распознавания (например, задача существования пути с фиксированными свойствами в заданном графе) должна быть для обсуждения ее принадлежности классам Р и NP переформулирована в виде задачи распознавания принадлежности заданного слова некоторому языку. Такая формализация необходима потому что одна и та же математическая идея при одном из двух разных способов представления данных может приводить к полиномиальному алгоритму, а при другом—нет.
Часто при обсуждении проблемы Р = NP исходят из машины Тьюринга (МТ) как модели вычислений, при этом вычислительные затраты измеряются числом тактов работы машины. Это связано с тем, что модель МТ удобнее модели РАМ при доказательстве разного рода теорем об алгоритмах, в особенности — теорем о невозможности алгоритмов с теми или иными свойствами. Но модель РАМ ближе, чем МТ, к реальным вычислительным устройствам, и хотелось бы, чтобы результаты исследования классов Р и NP, проводимые на основе модели МТ, сохраняли свою значимость для модели РАМ. Их значимость действительно сохраняется, о чем будет сказано в конце этого параграфа, а до той поры мы, как правило, не будем делать уточнений относительно модели вычислений. Но, повторяем, операции преобразования букв, входящих в слова, должны подсчитываться тщательно.
По сути дела, в каждой задаче распознавания принадлежности слова языку L обсуждается некоторый предикат и(х), областью определения которого является все множество Л*, и и(х) = 1, если и только если х е L. В дальнейшем нам часто будет удобно говорить не о языках, а о предикатах (по существу, это, конечно, одно и то же, но предикаты несколько предпочтительнее из-за того, что к ним можно применять логические операции, кванторы и т.д.). Соответственно, мы будем говорить о принадлежности предиката классу Р и т. д. Иногда нам будет удобно рассуждать о предикатах не одной, а нескольких таких переменных, которые принимают значения в Л*. В этих случаях без специального упоминания предполагается, что в алфавит Л включены некоторые разделители: если, скажем, разделитель «запятая» (т.е. «,») включен в Л, то v(x,у) имеет один аргумент х,у, где х и у суть слова в Л*, не содержащие разделителя «,» (кавычки по-
198
Глава 7. Сводимость
ставлены, чтобы не нарушать пунктуацию фразы). Соответственно, длиной пары слов x,y является |x| + |y\ + 1.
Теперь обсудим класс предикатов NP. Само его странное обозначение NP есть не что иное, как аббревиатура от английских слов nondeterministic polynomial —недетерминированный полиномиальный. Изначальное определение класса NP, появившееся в теории сложности в начале 70-х годов XX столетия, опиралось на понятие недетерминированного алгоритма1. Позднее появилось эквивалентное определение, не прибегающее к недетерминированности.
Определение 30.1. Заданный на Л* предикат u(x) принадлежит классу NP, если существуют предикат R(x,y) е Р и полином p{n) такие, что u{x) можно представить в виде
u{x) = ЗyеЛ,;|y Кp(|x|)R x, y). (30.1)
В том случае, когда u(x) = 1, слово y называется сертификатом слова x.
Пример 30.1. Булева формула f(xl5x2, ...,xn) выполнима, если су-
ществуют значения x°,x°, ...,xn° g {0,1} переменных xг,x2, ...,xn та-
кие, что
f(x°,x°, ...,xn°) = 1;
в противном случае булева формула невыполнима. Так, булева формула
( xiVxa) (30.2)
выполнима, так как ее значение при xг = 1, x2 = 0 равно 1, а булева формула xг Л x! одной переменной xг невыполнима, так как и при xг = 1, и при xг = 0 значение этой формулы есть 0.
Любая булева формула может быть закодирована словом в алфавите
Л1 = {x,0,1, (,),, л, V},
для этого переменные xг,x2,xъ, ... кодируются как xl,x10,xll, ...: вслед за буквой x помещается номер переменной в двоичной системе. Формула (30.2) кодируется как (xl VxlO), при этом, например, слово )xlx в алфавите Аг не является кодом какой-либо булевой формулы. Можно предложить простой алгоритм, который проверяет, является ли данное слово в алфавите Лх кодом какой-либо булевой формулы, а также алгоритм, который по данному коду некой булевой формулы и данным булевым значениям (нулям и единицам) тех
См., например, [13].