- •Глава 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. Сводимость
те С. Если использовать МТ вместо РАМ, то возникающие дополнительные затраты на переходы от одной ячейки ленты к другой можно сделать меньшими, чем |х| + Ср(|х|) при каждой битовой операции. Таким образом, общее число тактов работы МТ не превзойдет р(|х|)(|х| + Ср(|х|)), и сложность вычислений на МТ будет ограничена полиномом р{п){п + Ср{п)).
§ 32. Полиномиальная сводимость. Np-полные задачи
Одна и та же математическая задача распознавания может быть формализована с использованием разных алфавитов и разных способов кодирования. Тем не менее, если речь, например, идет о некоторой арифметической задаче, то можно ожидать, что основание q е N, q ^ 2, выбранной позиционной системы счисления не будет влиять на принадлежность соответствующего предиката классу Р, так как размеры [log„ (n + l)l, [log„ (п + 1)1 записей числа п в двух разных системах счисления являются величинами одного порядка, и сам переход от одной записи к другой может быть выполнен за время, ограниченное полиномом от размера входа.
Такого рода связь может существовать и между совершенно разными задачами распознавания, формализованными с помощью предикатов на словах.
Определение 32.1. Пусть v и v—предикаты на словах в алфавитах Л, Л. Говорят, что v полиномиально сводится к v, и пишут v ^р v, если существует такая функция /еР, /: Л*—>Л*, что v(x) = v(/(x)).
Из того, что для / е Р длина слова /(х) как функция от длины слова х полиномиально ограничена, а также из того, что композиция двух полиномов р3(£) = Pi(P2(0) вновь является полиномом (при этом если pi(t),p2(0 имеют неотрицательные коэффициенты, то и р3(£) тоже), мы получаем, что отношение ^р транзитивно и что
veP => veP
при v ^р V.
В 70-х годах прошлого столетия С. Кук доказал замечательную теорему о существовании в NP таких предикатов на словах, к каждому из которых полиномиально сводится любой предикат из NP. Принятая терминология такова:
Определение 32.2. Предикат и е NP называется №-полным, если v ^р и для каждого v е NP.
§ 32. Полиномиальная сводимость. Np-полные задачи
205
Перед формулировкой теоремы Кука напомним, что любую булеву формулу от xъx2, ...,xn можно задать в конъюнктивной нормальной форме (КНФ):
D1AD2A...ADm, Di = (li1vli2V...vlgki)J i = l,2,...,m, (32.1)
при этом lij является литералом, т. е. некоторой переменной xs или переменной с отрицанием xs. Каждую формулу, заданную в КНФ, можно изобразить словом из Л*, как обсуждалось в примере 30.1. Предикат, принимающий значение 1 на тех и только тех словах из Л*, которые являются кодами КНФ выполнимых формул, назовем Sat (от английского слова satisfiability, одно из значений которого —выполнимость).
Теорему Кука мы приводим без доказательства1:
Теорема Кука. Предикат Sat является NP-полным.
Если показано, что некоторый предикат u является NP-полным, и при этом для некоторого другого предиката v е NP установлено, что u ^p v, то из этого, очевидно, следует, что v тоже NP-полный.
Пример 32.1. Прямым следствием теоремы Кука является то, что рассмотренный в примере 30.1 предикат выполнимости произвольной, не обязательно заданной в КНФ, формулы является NP-полным. Полиномиальная сводимость предиката Sat к этому предикату очевидна: в качестве функции f, фигурирующей в определении 32.1, можно взять функцию, которая преобразует слово x из Л* в скобку «)» или еще в какой-нибудь символ, не являющийся кодом какой-либо булевой формулы, всякий раз, когда слово x не является кодом какой-либо КНФ, и преобразует x в x в противном случае (можно описать принадлежащий Р алгоритм вычисления f(x)).
Когда говорят о принадлежащих классам Р и NP задачах распознавания и о NP-полных задачах, а не о предикатах и языках, то при этом предполагают, что способ кодирования входных данных ясен из
1 Мы опускаем доказательство этой теоремы, называемой в некоторых источниках также теоремой Кука—Левина, из-за того, что оно требует привлечения специфической техники доказательств утверждений о машинах Тьюринга; такого рода доказательства выглядят естественно в определенном контексте, который отличается от контекста этого курса. Отчасти это послужило и причиной того, что в § 31 мы оставили без доказательства теорему Фишера—Рабина. Доказательство теоремы Кука имеется, например, в [13], [4], [23]. Прозрачное изложение идей доказательства принадлежности классу NP предиката, распознающего выполнимость произвольной булевой формулы, и полиномиальной сводимости такого предиката к Sat можно найти в [10].
206