Однако понять, что такое P, — это еще цветочки. Труднее дать определение класса NP. Формально оно звучит так: это класс задач, которые решаются за полиномиальное время на так называемых недетерминированных машинах Тьюринга. Можно довольно наглядно охарактеризовать эти задачи, используя понятие машины с подсказкой, хоть это и потребует некоторых усилий.
   Рассмотрим для примера задачу выяснения истинности высказывания «заданное число — составное» (то есть у него есть нетривиальные простые делители). Это вычислительно сложная задача (по крайней мере, считается таковой). Однако если нам дали подсказку — предложили кандидата на роль делителя данного числа, — то проверка правильности подсказки очень проста: достаточно по-школьному, в столбик, разделить число на предполагаемый делитель. Эта быстрая операция позволяет сразу заключить: если разделилось без остатка, значит, делитель найден и число действительно составное. В этом случае машина выдает ответ «да». Если же не разделилось — машина, по правилам игры, должна сказать «нет». Ее задача — не найти ответ, а проверить, верно ли, что данная ей подсказка — это правильный ответ. Машина имеет право ошибаться только в одну сторону: она может сказать «нет», если подсказка не подходит (но мы-то понимаем, что может подойти какой-нибудь другой делитель, просто именно этот оказался неправильным), но не имеет права принять неверную подсказку (сказать «да», если делитель-подсказка не делит данное число). Более того, если на самом деле ответ положительный, требуется, чтобы существовала подсказка, которую приняла бы машина (в нашем примере это условие выполнено). Итак, задача входит в класс NP, если существует машина Тьюринга, которая по данной ей подсказке сможет за полиномиальное время либо дать положительный ответ и не ошибиться, либо дать отрицательный ответ с возможной ошибкой; однако для каждого набора данных, ответ на который положителен, должна существовать подсказка, которую примет такая машина Тьюринга.
   Некоторые из задач класса NP — так называемые NP-полные задачи — обладают удивительным свойством универсальности: любую задачу из класса NP можно «полиномиально свести» к любой из NP-полных задач[Свести задачу A к задаче B — это значит построить алгоритм, который будет работать за полиномиальное время и решать задачу A, но при этом будет иметь право строить задачи вида B и считать, что они решаются моментально (за один такт). Такого рода вычисления называются вычислениями с оракулом; в данном случае роль оракула выполняет машина, решающая задачу B. Кстати, вычисления с оракулом — отдельная очень интересная тема: если, например, обобщить вопрос P=NP на машины Тьюринга с оракулом, то можно найти такой оракул, для которого P с этим оракулом будет равно NP. Но можно найти и такой оракул, что это равенство будет неверно!]. Вот популярный пример NP-полной задачи: предположим, что в большой компании некоторые люди знакомы друг с другом. Требуется найти размер максимальной группы людей, в которой все будут друг с другом знакомы. Это так называемая задача поиска клики — максимального полного графа. Другой пример — задача коммивояжера: дан набор городов и расстояний между ними, требуется найти кратчайший маршрут, следуя которому можно посетить все города. Третий пример я уже приводил в упомянутой выше статье: это SAT (задача пропозициональной выполнимости), в которой по заданной булевской формуле требуется определить, истинна ли она хоть при каких-нибудь значениях переменных. Эта задача исторически была первой из известных NP-полных задач (ее полноту доказал Стивен Кук (Stephen Cook), и проблему P=?NP иногда в его честь называют проблемой Кука). Несмотря на эквивалентность всех NP-полных задач, на деле сводить одну из них к другой бывает весьма неэффективно. Поэтому лучшие алгоритмы-рекордсмены, да и вообще алгоритмы, предназначенные для практического применения, разрабатываются для каждой задачи отдельно.
   Машины, работающие за полиномиальное время с подсказкой, кажутся гораздо мощнее, чем обычные машины без подсказки. Действительно, им нужно всего лишь проверить данный ответ, а обычной машине нужно его сначала найти. Однако вопрос о том, нельзя ли каждую недетерминированную машину Тьюринга превратить в детерминированную, до сих пор открыт. Собственно, это и есть знаменитая проблема равенства классов P и NP.
   Учитывая сказанное выше об NP-полных задачах, проблема будет решена положительно, если найдется полиномиальный алгоритм хотя бы для одной NP-полной задачи. Но пока таковых нет даже в перспективе; более того, нет даже субэкспоненциальных алгоритмов (то есть тех, которые бы работали за время, меньшее 2 cn , но большее полиномиального — например, за 2 √ n~). Такие алгоритмы существуют только для задач, которые подозревают в том, что они занимают промежуточное положение — и не полиномиальные, и не NP-полные. Такова, например, проблема изоморфизма графов: по двум данным графам понять, можно ли перевести вершины одного графа в вершины другого так, чтобы ребра переходили в ребра. Впрочем, подозрения могут и не оправдаться: например, одним из самых громких результатов последних лет был полиномиальный алгоритм для задачи проверки числа на простоту. Примечательно, кстати, что проверка на простоту оказывается принципиально проще, чем разложение на множители[Возможно, это покажется менее странным, если напомнить, что сложность измеряется от длины входа. А длина входа в данном случае — это длина числа в двоичной записи, то есть примерно его логарифм. И алгоритм, чтобы быть полиномиальным от длины входа, должен быть логарифмическим от величины числа, которое нужно проверить на простоту].
   Теперь, когда мы поняли формулировку задачи, перейдем к ее обсуждению.
   Первое: почему она так сложна? Конечно, можно сказать «потому что вот уже полвека пытаются и никак не могут», но есть и более интересные и глубокие причины. Я уже упоминал в сноске, что если рассмотреть «классы с оракулами», то для разных оракулов ответ получится разным. Переход от обычных классов к классам с произвольными оракулами называется релятивизацией. Большинство существующих идей и методов доказательства теорем в теории сложности вычислений выдерживают релятивизацию, то есть могут быть обобщены на случай произвольного оракула. Стало быть, все эти идеи и методы для доказательства (не)равенства P и NP неприменимы! Более того, в 1996 году Александр Разборов (наш соотечественник, лауреат премии Неванлинны) и Стивен Рудих (Steven Rudich) ввели класс так называемых естественных доказательств и показали, что нет естественных доказательств, которые бы позволили доказать, что SAT не решается за полиномиальное время. Под впечатлением таких результатов некоторые математики начинают склоняться к тому, что несовпадение P и NP может оказаться недоказуемым в рамках существующей аксиоматики. В 2002 году проводился даже опрос на эту тему. Из ста исследователей на вопрос «как вы считаете, равны ли P и NP?» 61 ответил «нет», 9 — «да», 22 — «сомневаюсь» и 8 — «наверное, вопрос не зависит от существующей аксиоматики».
   Второе: что будет следовать из различных решений этой задачи. Если P не равно NP, все в порядке. Небо не упадет на землю, Запад не сойдется с Востоком, а пришествие Зверя будет отложено до лучших времен. А вот если P=NP, то начнется такое… Практика показывает: на деле «полиномиальное» означает «относительно легко решаемое». И если появятся способы относительно быстро решать NP-полные проблемы — могут возникнуть очень серьезные проблемы уже вне математики. Например, современная практическая криптография, основанная на RSA или DES/AES, окажется бесполезной. К чему это приведет, любой человек, знакомый с тем, как нынче хранится защищенная информация (номер вашей банковской карточки, пароль к вашему почтовому ящику и т. п.), легко может себе представить. Кроме того, это повлечет за собой серьезные изменения в наших представлениях об иерархии сложностных классов: целый бесконечный набор классов, которые сейчас считаются разными — так называемая полиномиальная иерархия, — «схлопнется» до одного-единственного класса P, и многие другие весьма правдоподобные предположения окажутся неверными. И все же, в отличие от гипотезы Римана, здесь нельзя сбрасывать со счетов вероятность того, что классы окажутся равными: уже много открытий чудных приготовила нам теория сложности, и как знать — может быть, наша уверенность в том, что P не равно NP, — тоже не более чем иллюзия…
   Подведем итоги. Проблема равенства или неравенства классов P и NP — одна из центральных проблем современной информатики. Как мы только что видели, на предположении о неравенстве этих классов держится очень большая часть повседневной практической безопасности каждого из нас. Так что миллион за такую проблему — совсем не много, пусть даже платят за любое из двух решений — что за «равно», что за «не равно»[Правда, я не знаю, заплатят ли миллион за доказательство того, что это (не)равенство нельзя доказать. Думаю, да]. А еще эта проблема, наверное, одна из самых доступных для понимания непрофессионального математика — что порождает поток дилетантских, очевидно неверных решений. Надеюсь, читатели «КТ» будут умнее и если уж и придумают решение, то такое, чтобы о нем стоило написать отдельную подробную статью, а лучше — книгу.
 
   NP-полнота как генератор драйва
   Cреди NP-полных задач есть и более веселые экземпляры, нежели упоминаемые в статье Сергея Николенко классические проблемы математики. Оказывается, точно такой же полнотой обладают и стратегии некоторых популярных игр. Самые яркие примеры: «Тетрис» и «Сапер» (он же «Минер», «Minesweeper»), пожирающие с одинаковым аппетитом что рабочее, что свободное время. Связаны ли гипнотизирующие свойства игр с (предполагаемым) отсутствием для них простого алгоритма победы — вопрос из области психологии, а психологи, как известно, не склонны к однозначным ответам. Но не так давно было строго математически доказано: нахождение полиномиальных алгоритмов для этих игр повлечет снятие вопросительного знака в гипотезе P=?NP, а стало быть, и падение современной криптографии (по крайней мере, концептуально). В этом смысле «Тетрис» и «Сапер» ничем не хуже зловещего коммивояжера, согласного двигаться лишь по наиболее дешевому маршруту.
   NP-полны многие задачи, связанные с даже не с обычным, а с сильно упрощенным офлайновым «Тетрисом», когда поток фигурок, валящихся с потолка, заранее известен, а каждую фигурку можно переворачивать и двигать сколько угодно раз. Среди этих задач — максимизация числа заполненных строк, а также минимизация высоты, на которой в процессе игры находится самый верхний квадратик уже уложенных фигурок (подробнее см. работу исследователей из MIT, arXiv:cs:CC/0210020).
   Очень красиво доказывается NP-полнота стратегического планирования для «Сапера». Стратегия в нем основана на решении такой задачи — выяснить, допустима ли заданная конфигурация игры, то есть расстановка цифр, флажков, открытых и закрытых квадратиков (игра идет на поле произвольного размера). Допустимость означает, что эта конфигурация действительно возникает при некотором начальном расположении мин. Именно проблема установления допустимости NP-полна, а доказательство получено путем сведения этой задачи к классической NP-полной проблеме SAT. Но самое интересное, разумеется, не «что», а «как».
   Ричард Кей из Университета Бирмингема (Richard Kaye) свел «Сапера» к SaT следующим образом. В SaT речь идет о поведении булевой формулы, то есть схемы, реализуемой гейтами вида "И", «ИЛИ», «НЕ». Кей придумал несколько экзотических конфигураций «Сапера», которые напрямую в самом буквальном смысле реализуют гейты и соединяющие их проводники. Из таких конфигураций можно собрать любую логическую схему. По сути, игровое поле превращается в компьютер! Квадраты поля принимают значения T (есть мина) или F (нет мины). Проверка допустимости конфигураций, реализующих логические и другие конструктивные элементы, интерпретируется как выполнение соответствующих им функций. На рис. 1 показано, как устроен провод, на рис. 2 — вентиль "И" (оригиналы рисунков см. на сайте Кея).
   NP-полны также задачи составления самых обыкновенных расписаний для школьников и студентов (невзирая на это одна из российских компаний, легко находимая «Гуглом», предлагает программу составления расписаний, получившую призы на целом ряде конкурсов; суха теория, мой друг, но древо жизни пышно зеленеет, как говаривал один коварный литературный персонаж).
   Таковы же и задачи оптимальной стратегии на рынке труда, частный случай которых — чисто математически, конечно, — подбор оптимальных супружеских пар по объявлениям. Короче говоря, что в игре, что в жизни примитивный (ну хорошо, полиномиальный) просчет ситуаций, что называется, не катит, и это отчасти обнадеживает.
   Но только если P не равно NP!
   Литература
   [1] www.claymath.org/millennium/P_vs_NP
   [2] en.wikipedia.org/wiki/Complexi-ty_classes_P_and_NP

allmart.